//@pnavi
[[←前>敵を動かす(2)]] [[次→>スタート画面を作る]] [[トップ>迷路ゲームの作成]]
**自機や敵を破壊する [#vfe1d356]
このゲームでは、敵をやっつける方法が少々変わっていて
「敵の背後から体当たりする」という方法を使います
&ref(how2kill.png);
***敵と自機がぶつかったら、自機が死ぬ [#k7bddb2b]
とりあえず、敵にぶつかったら自機が死ぬようにしましょう
敵オブジェクトをダブルクリックして、次の行を追加します
//prog
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の条件部から見ていきましょう
//progfrac
if (crashTo($myChar)) ...
crashToは、この敵が自機($myChar)に当たっているかという判定を行います。
当たっている場合はif文の後ろが実行されます。
なお、自機の名前は、自機をクリックし、オブジェクトインスペクタで確認できます。
***敵と自機がぶつかったら、敵が死ぬ [#e0eaf320]
このままだと必ず自機が死ぬので、自機が敵の背後からぶつかった場合には、敵のほうが死ぬようにしましょう。
ところで「背後からぶつかる」というのをもう少し詳しく説明すると
「敵の進行方向と''反対側''から自機がぶつかる」
ということになります、もうすこし具体的にいうと
「敵が''右''(左)に進んでいるとき、自機が''左''(右)からぶつかる」
となります。
さらに、「自機が左(右)からぶつかる」は、いいかえると
「敵と自機がぶつかったとき、自機が敵より左(右)にいる」
となります。
これらのことをまとめると
<blockquote><pre>
「敵と自機がぶつかったときに、
敵が右に進んでいて、自機が左にいる または
敵が左に進んでいて、自機が右にいる
ならば、敵が死ぬ。そうでなければ自機が死ぬ」
</pre></blockquote>
という条件を記述すればよさそうです。
これらを踏まえて、プログラムは次のようになります。
//prog
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();
}
//@pnavi
[[←前>敵を動かす(2)]] [[次→>スタート画面を作る]] [[トップ>迷路ゲームの作成]]