Tonyu System 1 - wiki


←前次→チュートリアルWikiトップ

チュートリアル - 実践編 - 迷路ゲーム (4/7)

自機や敵を破壊する

このゲームでは、敵をやっつける方法が少々変わっていて 「敵の背後から体当たりする」という方法を使います

how2kill.png

敵と自機がぶつかったら、自機が死ぬ

とりあえず、敵にぶつかったら自機が死ぬようにしましょう

敵オブジェクトをダブルクリックして、次の行を追加します

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();
}

←前次→チュートリアルWikiトップ