このWikiは古くなりました:新しいWikiへ移動

←前  次→  トップ

自機や敵を破壊する

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

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文の後ろが実行されます。

なお、自機の名前は、自機をクリックし、オブジェクトインスペクタで確認できます。

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

このままだと必ず自機が死ぬので、自機が敵の背後からぶつかった場合には、敵のほうが死ぬようにしましょう。

 ところで「背後からぶつかる」というのをもう少し詳しく説明すると

 「敵の進行方向と反対側から自機がぶつかる」

ということになります、もうすこし具体的にいうと

 「敵が(左)に進んでいるとき、自機が(右)からぶつかる」

となります。

さらに、「自機が左(右)からぶつかる」は、いいかえると

 「敵と自機がぶつかったとき、自機が敵より左(右)にいる」

となります。

 これらのことをまとめると

blockquote><pre> 「敵と自機がぶつかったときに、   敵が右に進んでいて、自機が左にいる または   敵が左に進んでいて、自機が右にいる   ならば、敵が死ぬ。そうでなければ自機が死ぬ」

/pre></blockquote>

という条件を記述すればよさそうです。

これらを踏まえて、プログラムは次のようになります。

  

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

←前  次→  トップ


添付ファイル: filehow2kill.png 681件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-11-14 (火) 21:24:37 (2352d)