2014-06-30 3 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 부분에서, 원래 적을 hitTesting 적이 있었지만 적 자체가 테스트를 치게하고 완전히 움직임과 회전을 망쳤습니다. 그래서 우리는 위의 것을 시도해 보았습니다. 적의 인스턴스를 배열의 다음 지점에서 다음번에 적의 인스턴스를 테스트하여 적을 테스트했습니다. 적의 대부분은 작동하지만 배열의 마지막 인스턴스 존재하지 않는 인스턴스를 hitTest하려고 시도하고 성능이 크게 저하됩니다.

다른 사람이 나에게 더 나은 방법으로 성능에 친숙한 배열에서 이러한 개체를 테스트 할 수있는 방향을 제시 할 수 있습니까?

+0

가능한 [스테이지의 여러 객체와의 충돌 테스트] (http://stackoverflow.com/questions/8288209/collision-testing-with-multiple-objects- 무대 위) – CyanAngel

답변

1

오류를 제거하려면 i가 (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

오, 그 사람은 위대한 독서이며, 내가 찾고 있던 바로 그거야, 크리스티나 고마워! –