←前 次→ トップ |
敵の動きに変化をつける
今の敵は、上から下に直線で飛んでくるだけなので、ちょっと変わった動きをつけましょう
途中までは今までどおり下に飛んできて、その後自機のいる方向に曲がって飛んでくるようにします。敵をダブルクリックして、次のようにかきかえましょう。
新しい動きを追加する
extends SpriteChar; function onDie() { appear(new Bomb(x , y ,$pat_Sample+4)); } |
変更した部分を順番に見ていきましょう
|
まず rnd(50)は、敵を出現させるでも登場した、乱数を返すメソッドです。この場合、0から49の整数の乱数が返されます。それに100が加算されるので結果として、nextyには100から149の乱数が代入されます。 次のwhileの条件が変わっています
|
yがnextyより小さい(nextyより上)にいるまでは、先ほどまでと同じ処理をするようになります。つまり、上のほうにいるときはまっすぐ降りてきます。
そして、動きが変化するところでは、次のような処理を行います
|
vxは、後で説明するように、移動方向のx成分です。
x<$myChar.xならば(つまり、敵の位置が自機より左なら)右に移動するために、 vx=2のように移動方向を正の値(右方向)にします。
その後ろについている elseは「そうでなかったら」という意味です。すなわち x<$myChar.xでないならば(つまり、敵の位置が自機より右なら)左に移動するために、 vx=-2のように移動方向を負の値(左方向)にします。
上のようにしてvxを設定し、次の処理で実際に移動を行います。
|
extends SpriteChar; function onDie() { appear(new Bomb(x , y ,$pat_Sample+4)); } nexty=rnd(50)+100; while (y<nexty) { y=y+2; for (t in $chars) { if ( t is Tama && crashTo(t) ) die(); } if (crashTo($myChar)) $myChar.die(); update(); } if (x<$myChar.x) vx=2; else vx=-2; while (y<$screenHeight) { y=y+3; x=x+vx; for (t in $chars) { if ( t is Tama && crashTo(t) ) die(); } if (crashTo($myChar)) $myChar.die(); update(); } |
メソッドを使うともっと整理できます。当たり判定を行うatariHanteiメソッドを作成してみましょう。
extends SpriteChar; function onDie() { appear(new Bomb(x , y ,$pat_Sample+4)); } function atariHantei() { for (t in $chars) { if ( t is Tama && crashTo(t) ) die(); } if (crashTo($myChar)) $myChar.die(); } |
←前 次→ トップ |