2012-02-02 11 views
0

基本的には、配列内のhitTestの箇条書き(addChild - >配列にプッシュされたもの)と、配列を含む別の配列(addChild - >よく)。 (:私は、ターゲット変数を使用して)弾丸のため2つの配列のオブジェクトを持つhitTest

function moveEnemyLarge():void{ 
    var target2:EnemyLarge; 

    for(var i2:int=0;i2<enemyShipArray.length;i2++){ 
     // Move each ship in the array down. 
     target2 = EnemyLarge(enemyShipArray[i2]); 
     target2.y += 0.5; 

     // Hit Test 
     if(target2.hitTestObject(PLACEHOLDER)){ 
      trace("SHIP HIT BULLET"); 
      removeChild(target2); 
      enemyShipArray.splice(i2,1); 
      i2--; 
     } 

     // Remove when off-stage. 
     if(target2.y > 700){ 
      removeChild(target2); 
      enemyShipArray.splice(i2,1); 
      i2--; 
     } 
    } 
} 

...とほぼ同一機能:私が持っている瞬間

。 弾丸配列内のオブジェクトを船の配列内のオブジェクトでhitTestするのが一番簡単です。 PLACEHOLDERスロットに「ターゲット」を置くことはできません。また、私が見たことから、他の人の中にあるものを押してしまう人もいます。

あなたが私の一部でさらなるコードや説明を必要とするかどうか教えてください - 私はAS3のロープを学んでいて、まだ束のテクニックを学んでいません!

答えて

1

を読み取るには明白な解決策は、2つのループになります。

for (var i:int = 0; i < ships.length; i++) { 
    var target:EnemyLarge = ships[i]; 
    target.y += .5; 
    for (var j:int = 0; j < bullets.length; j++) { 
    var bullet:Bullet = bullets[j]; 
    if (target.hitTestObject(bullet)) { 
     ships.splice(i,1); i--; 
     removeChild(target); 
    } 
    } 
} 

この1つは、単純な学習プロジェクトのためにOKですが、それにはいくつかの欠点があります:

  1. 決してを(私は決して言わなかった)あなたが反復されているコレクションを変更します。後で何が起こっているのかを理解しようとすると、何時間ものデバッグが必要になります。
  2. 弾丸や船舶が非常に速い場合、弾丸は1つのフレームで船中を移動できます。この場合、弾丸だけでなく、弾丸の最後の位置から現在の位置までの行をテストすることもできます。
  3. 弾丸や船舶がたくさんある場合は問題が発生します。この場合、線形検索よりも速く船上の弾丸を照会するためのデータ構造が必要になります。
0

あなたのセットアップでは、ループ内のループに頼らざるを得ず、それぞれの弾を各船に照合する必要があります(逆も同様)。内部ループは次のようになります。

for(var bullet:Bullet in bullets) { 
if(target2.hitTestObject(bullet)){ 
    trace("SHIP HIT BULLET"); 
    bullet.parent.removeChild(bullet); // remove the bullet 
    removeChild(target2); 
    enemyShipArray.splice(i2,1); 
    i2--; 
} 
} 

これを回避するには、いくつかの方法があります。

  • その普通に衝突が存在する場合、Y空間にゲーム空間を仕切る子
  • ための衝突のためにのみチェックの各セルグリッドシステムは、X軸衝突
  • 画素参照をチェック弾丸はそれが
  • を襲った船の上にいくつかの色分けされた情報と、私は今考えることはできませんいくつかの他
関連する問題