2016-04-15 6 views
0

私はフラッシュcs4 as3でプラットフォームゲームを作っており、別のクラスを一緒に正しく動作させるのに苦労しています。私は弾丸クラス、敵クラス、および敵の境界を決定するバンパークラスを持っています。弾丸が敵に当たると、敵の死のアニメーションが再生され、その後両方がゲームから取り除かれます。そのレベルの最後の敵が削除されたとき、私はこのエラーは、用語が定義されていないとプロパティを持っていないと言います。また、私が敵を秩序から抹殺すると、物事は正しく機能しません。私のコードには何らかの誤りがあるはずです。フラッシュas3プラットフォームゲーム(私はnoobです)

if (enemyList.length>0) { 
     for (var i:int = 0; i < enemyList.length; i++) { 
      if (bulletList.length>0) { 
       for (var j:int = 0; j < bulletList.length; j++) { 
        if (enemyList[i].hitTestObject(bulletList[j])) { 
         trace("Bullet and Enemy are colliding"); 
         enemyList[i].gotoAndPlay("dead"); 
         bulletList[j].removeSelf(); 
         enemyList[i].xSpeedConst=0; 
         enemyList[i].isDead = true; 
        } else { 
         enemyList[i].isDead = false; 
        } 
       } 
      } 
     } 
    } 
} 

ともプレイヤーと敵とバンパーと敵の間:ここでは弾丸と敵クラス間の私のコードです。

if (enemyList[k].isDead == false && enemyList.length>0) { 
     for (var k:int = 0; k < enemyList.length; k++) { 
      if (enemyList[k].isDead == false && bumperList.length>0) { 
       for (var h:int = 0; h < bumperList.length; h++) { 
        if (enemyList[k].hitTestObject(bumperList[h])) { 
         enemyList[k].changeDirection(); 
        } 
       } 
      } 
     } 
    } 

    if (enemyList[m].isDead == false && enemyList.length>0) { 
     for (var m:int = 0; m < enemyList.length; m++) { 
      if (enemyList[m].hitTestObject(player)) { 
       trace("player collided with enemy"); 
       currentHP-=5; 
       if (currentHP<=0) { 
        currentHP=0; 
        trace("you died"); 
        gotoAndStop(1); 
       } 
       updateHealthBar(); 
      } 
     } 
    } 

は申し訳ありませんが、ちょっと長い私はここにまたは多分すべての私のコードがちょうど悪い構造化されているが明らかに不足しているイム何かのように感じています。いずれにしても、どんな助けでも大変感謝しています!

+0

あるべき外の '[enemyList(もしk] .isDead == false && enemyList.length> 0){'は' if(enemyList.length> 0){'でなければなりません。 –

+0

そして、私は 'else {enemyList [i] .isDead = false;}'が重複していると思います。 bulletList [4]が敵に命中した場合、bulletList [5]が敵に命中しなかった場合、敵は死んでいません復活) –

+0

@ Yasuyuki:forループの本体がすべての配列要素に対して一度だけ実行されるため、forループをfor文にラップするのはあまり意味がありません。要素がない場合、実行されません。配列の長さをチェックするif文は冗長です。それは完全に削除する必要があります。 – null

答えて

0

弾丸が敵に当たったらリストから敵と敵を削除する必要はありませんか?あなたはおそらく、表示リストから弾丸を削除しますが、箇条書きの参照はまだbulletListに滞在すると、次の反復に照らしてチェックされます

bulletList[j].removeSelf(); 

を行うため。 forループ

また、あなたの非常に最初のチェックが

if (enemyList.length != 0 && bulletList.length != 0) 

何弾丸およびその逆が存在しない場合はループの谷へのポイントは、すべての敵はありません:)

+0

入力していただきありがとうございますbulletList自体を削除しましたif文がうまくいかなかったのを試しました:( – Dan

+0

はい、bulletListから箇条書きのインスタンスを削除する必要があります。そうでない場合は次のループでチェックされますもう一度ステージから外されましたが、あなたの敵と同じです – Philarmon

関連する問題