これはですね雪を上の方からへろへろと降らしてきて、それがモノに当たった時点で軌跡を残すようにしているんですよ。雪は親スクリプトとかいうので記述していますよ。
私、いまだに親スクリプトってやつがわからなくて……このムービーではさらっとスクリプトを書いていますよね。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