2014-06-30 24 views
0

我的測試遊戲進展緩慢,我已經到了可以通過陣列將敵人加入舞臺的地步,他們跟隨玩家並向玩家旋轉,沒有任何問題。我的下一個任務是讓每個敵方碰撞檢測,否則他們最終都完全重疊,這不是很現實。as3陣列中的敵人互相測試對方?

這裏是我到目前爲止的代碼只是關於敵人:

public function initEnemy():void 
     { 
      enemyArray = new Array(); 

      for (var i = 0; i < 2; i++) 
      { 
       var enemy:Enemy = new Enemy((Math.random() *500 + 20), (Math.random() * 200 + 50)); 
       stage.addChild(enemy); 
       enemyArray.push(enemy); 
      } 


     } 
     public function enemyBehavior():void 
     { 
      var enemyRotation:int; 

      for (var i:int = 0; i < enemyArray.length; i++) 
      { 
       var enemy = enemyArray[i]; 

       var dx:int = enemy.x - player.x; 
       var dy:int = enemy.y - player.y; 

       var dr:int = dx * dx + dy * dy; 
       var dr2:int = Math.sqrt(dr); 

       enemy.x -= enemySpeed * dx/dr2; 
       enemy.y -= enemySpeed * dy/dr2; 

       enemyRotation = -(Math.atan2(enemy.x - player.x, enemy.y - player.y) * 180/Math.PI); 
       trace(enemyRotation); 

       enemy.rotation = enemyRotation; 

       if (enemy.hitTestObject(enemyArray[i+1])) 
       { 
        enemy.x -= -enemySpeed; 
        enemy.y -= -enemySpeed; 
       } 

因此,這裏也正是我堅持。在enemy.hitTestObject部分,我原本只是敵人打擊測試敵人,但是這會導致敵人自己進行測試並完全搞亂了運動和旋轉。所以我嘗試了上面的方法,在陣列的下一個點上接下來在敵人實例中測試每個敵方實例,並且它與大多數敵人(但不是全部)一起工作,並且由於陣列中的最後一個實例而產生錯誤將試圖對一個不存在的實例進行測試,並且性能有巨大的下降。

有人可以給我某種方向上更好的方法來測試打從更表現友好數組這些對象呢?

+0

[在舞臺上使用多個對象進行碰撞測試的可能的重複](http://stackoverflow.com/questions/8288209/collision-testing-with-multiple-objects-舞臺上) – CyanAngel

回答

1

爲了擺脫錯誤的,我應該小於(enemyArray.length - 1),但邏輯仍然是錯誤的,因爲它不會將所有的敵人之間的衝突檢查。要檢查碰撞你的敵人,你應該這樣做之間:

for (var i:int = 0; i < enemyArray.length - 1; i++) { 
    var enemy1 = enemyArray[i]; 

    for(var j:int = i+1; j< enemyArray.length; j++) { 
     var enemy2 = enemyArray[j]; 
     if(enemy1.hitTestObject(enemy2)){ 
      //do something on collision 
     } 
    } 
} 

如果你想要的東西高性能,特別是如果你有很多的敵人,你應該比較敵人的座標,並看看他們是否重疊。您可以在這裏閱讀更多關於碰撞多個對象的信息:http://www.emanueleferonato.com/2008/06/07/managing-multiple-balls-collisions-with-flash-as3-version/

+0

哦,這是一個偉大的閱讀,正是我在找的,非常感謝你克里斯蒂娜! –