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


//@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)]]  [[次→>スタート画面を作る]]  [[トップ>迷路ゲームの作成]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS