自機や敵を破壊する †このゲームでは、敵をやっつける方法が少々変わっていて 「敵の背後から体当たりする」という方法を使います 敵と自機がぶつかったら、自機が死ぬ †とりあえず、敵にぶつかったら自機が死ぬようにしましょう 敵オブジェクトをダブルクリックして、次の行を追加します extends SpriteChar; vx=2; while(1) { x+=vx; if (x<0) vx=2; if (x>$screenWidth) vx=-2; if (rnd(500)==0) vx=-vx; if (crashTo($myChar)) $myChar.die(); if (vx<0) f=1; else f=0; update(); } まずifの条件部から見ていきましょう if (crashTo($myChar)) ... crashToは、この敵が自機($myChar)に当たっているかという判定を行います。 当たっている場合はif文の後ろが実行されます。 なお、自機の名前は、自機をクリックし、オブジェクトインスペクタで確認できます。 敵と自機がぶつかったら、敵が死ぬ †このままだと必ず自機が死ぬので、自機が敵の背後からぶつかった場合には、敵のほうが死ぬようにしましょう。 ところで「背後からぶつかる」というのをもう少し詳しく説明すると 「敵の進行方向と反対側から自機がぶつかる」 ということになります、もうすこし具体的にいうと 「敵が右(左)に進んでいるとき、自機が左(右)からぶつかる」 となります。 さらに、「自機が左(右)からぶつかる」は、いいかえると 「敵と自機がぶつかったとき、自機が敵より左(右)にいる」 となります。 これらのことをまとめると
という条件を記述すればよさそうです。 これらを踏まえて、プログラムは次のようになります。
extends SpriteChar; vx=2; while(1) { x+=vx; if (x<0) vx=2; if (x>$screenWidth) vx=-2; if (rnd(500)==0) vx=-vx; if (crashTo($myChar)) { //↑敵と自機がぶつかったときに if ((vx>0 && $myChar.x<x) || (vx<0 && $myChar.x>x)) { //↑敵が右方向、自機が左 または 敵が左方向、自機が右 die(); //↑ならば、敵が死ぬ } else { $myChar.die(); //↑そうでなければ自機が死ぬ」 } } if (vx<0) f=1; else f=0; update(); } |