イヤでもわかるshockwave講座 > 32Kの世界 >雪のムービー >このページ
雪のムービーの解説

雪のムービーの解説

これは簡単そうに見えて難しいですね。たぶん私やったらわかりませんねぇ。

これはですね雪を上の方からへろへろと降らしてきて、それがモノに当たった時点で軌跡を残すようにしているんですよ。雪は親スクリプトとかいうので記述していますよ。

私、いまだに親スクリプトってやつがわからなくて……このムービーではさらっとスクリプトを書いていますよね。propertyってやつがあるでしょ?これは何なんですか?

たとえばスプライトとかだと、the locH of sprite ..とように書きますよね。このthe locH ってのがスプライトのプロパティなんですよ。なんつうんでしょうか、それぞれの子どもの性格みたいなもんで……。子オブジェクトの場合はこのプロパティを自分で設定できるんですよ。このスクリプトの場合はmyHとmyVというのを設定しています。自分の居る場所のことですね。それぞれの子どもが自分達の場所を自分で覚えて居るんですよ。

う〜ん、全然わかんない……。ではnewコマンドで子オブジェクトを作り出したときには、どういうことが行われるの?

自分のスプライト(チャンネル)番号を決めて、自分の座標を決めています。この時点ではまだ表示もされません。やっぱり表示をするときにはスプライトに命令を送らないといけませんからね。このスプライトが表示されるのは次のmoveハンドラの中です。あとは普通のスプライトの描画と似ているでしょ?違うところは〜of meとなっている所ぐらいですか。このmeの部分が色々変わるので、多くのキャストを動かすことができるんですよ。これをいちいちスプライトで処理していたらキリがありませんからね。

長々と説明ありがとう。でも何をいってんのか、さっぱりわかんないです。えっへん。

ま、ゆっくりでいいですから、このスクリプトをまねて、とにかく自分で作ってみて下さいね。そうしたら、なんとなくわかってきますよ。なんとなくわかれば、それでええんちゃいますかね(笑)。本当に勉強したいんだったら、コマンドの意味を調べてみて下さいね。特にトリッキーな手法は使っていません。本編の方でも親スクリプトについて解説していますから、そっちも見てね。

はぁい。

**ムービー開始時の色々なことです。子オブジェクトを格納するリストなどを定義します**
on startMovie
 global yukiList
 set yukiList=[]
 repeat with m=10 to 25
  puppetSprite m,TRUE
 end repeat
end


**親スクリプト本体です。キャスト名は"oya"としています**
property myH,myV,mySpNum

on new me,spNum
 set the mySpNum of me to spNum
 set the myH of me to random (320)
 set the myV of me to 0- random(20)
 return me
end

on move me
 --雪の跡を残す為に軌跡効果をOnにしていましたが、
 --落下中はOffにしておきます
 set the trails of sprite mySpNum to false
 --範囲の設定です。画面下に消えた場合は初期化します
 if the locV of sprite mySpNum >300 then
  set the myV of me to 0-random(20)
  set the myH of me to random(320)
 end if

 set the locH of sprite mySpNum to the myH of me +random(5)-random(5)
 set the locV of sprite mySpNum to the myV of me + random(5)+5

 set the myH of me to the locH of sprite mySpNum
 set the myV of me to the locV of sprite mySpNum
 updatestage

--接触を判断するルーチンです
 repeat with m=1 to 4
  if sprite myspNum intersects sprite m then
   --跡を残すために軌跡効果をOnにします
   set the trails of sprite mySpNum to True
   updatestage
   set the myH of me to random(320)
   set the myV of me to 0-random(20)
  end if
 end repeat

 updatestage
end
**子オブジェクトを移動させる命令です**
on exitFrame
 global yukiList
 repeat with m=1 to 10
  move getAt(YukiList,m)
 end repeat

 go to the frame
end
**子オブジェクト制作の命令です**
on exitFrame
 global yukiList
 repeat with m=10 to 20
  setAt YukiList, m-9, new(script"oya",m)
 end repeat

end


(c)Akira SAno 1996
一応こんなページでも著作権は佐野彰に存在します
リンクフリーですが、メールでご連絡頂けたら嬉しいです。
96/12/12更新 home32Kの世界に戻る