2012-11-02 1 views
0

간단한 게임을 만들고 벡터를 적을 가득 채우고 내 "레이저" 개체 (그것은 공간 shmup). 모든 레이저는 벡터를 통해 반복하고 적중 원을 차단하는지 확인합니다. 문제는 한 레이저가 적을 파괴 할 때, 나머지 레이저는 이미 동일한 벡터를 확인하려고합니다. 적의 이미 스플 라이스가 풀려서 벡터의 크기가 변경 되었기 때문에 범위를 벗어납니다.동일한 벡터 (ActionScript 3)를 반복하는 루프에서 벡터 밖으로 요소 연결

for each (var enemy:Enemy in enemies){ 
       var distanceX = this.x - enemy.x; 
       var distanceY = this.y - enemy.y; 
       var distance = Math.sqrt((distanceX*distanceX) + (distanceY*distanceY)); 

       if (distance <= enemy.hitRadius) { 
        enemy.removeEnemy(); 
        enemies.splice(enemies.indexOf(enemy),enemies.indexOf(enemy)); 
       } 
} 
난 단지 모든 레이저 객체가 검사를 완료 할 때이를 삭제 한 다음 삭제할 벡터의 개별 요소의 인덱스를 수집 가겠어요 어떻게

?

편집 : 여기 내 removeEnemy() 함수는 단지의 경우, 내 적 클래스에서의 :

public function removeEnemy(){ 
      removeEventListener(Event.ENTER_FRAME, move); 
      parent.removeChild(this); 
      trace("removed Enemy", enemies.indexOf(this)); 
     } 

편집 편집 : 나는 또한 내 removeEnemy에 널 참조 포인터 오류로 "부모"를 얻고있다() 기능 ...하지만 가끔. 이 두 가지 문제 중 하나를 해결하면 다른 문제도 해결되지만 확실하지 않은 느낌이 들었습니다.

+1

레이저가 벡터를 확인하는 동안 어떨까요 ... 적중을 적중으로 표시합니다. 그런 다음 모든 레이저 검사가 끝나면 "성공"이라고 표시된 모든 것을 제거하기 위해 최종 실행을하십시오. –

+0

문제는 히트 검사가 레이저 객체 자체에 있으며, 이는 코드에서 어느 정도 참조되지 않는다는 것입니다. 나는 다른 벡터/배열의 레이저 물체를 보관하지 않아도되고, 단순히 그들 자신을 다루게하는 것을 피하기를 바랐다.하지만 더 좋은 방법이 없다면 나는 레이저 배열을 유지할 수있을 것이라고 생각한다. 스테이지의 모든 하위 항목을 검사하여 참조를 얻고이를 배열로 사용하는 방법이 없습니까? 각각 (var 레이저 : 스테이지의 레이저)을 모두 볼 수있는 좋은 방법인데, 조금 더 빨라질 수 있습니다. –

+0

코드 코너 .. :) 재미. 나는 네가 레이저를 찾을 수있을 것 같아. 그러나 레이저보다 무대에 더 많은 것이 있습니다. 레이저와 같은 무언가를하십시오. 다음 (레이저) 항목이 레이저가 아닌 경우 null이됩니다. –

답변

0

해결했습니다. 문제는 실제로 "splice()"메서드를 사용하는 방법이었습니다. 두 번째 매개 변수가 스플 라이스를 중단 할 위치의 끝 인덱스가 아니라는 사실이 밝혀졌습니다. 스플 라이스 할 요소의 수입니다. 그래서 요소 0에 접합하려 할 때 아무것도 접합하지 않았습니다. 요소 3을 접합하려 할 때 4와 5도 접합하고있었습니다. API를 올바르게 읽지 않아서 쓰레기처럼 느껴졌습니다. 이것에 몇 시간. 모든 사람들에게 감사의 말을 전했다. 너희들은 내가 문제를 생각한 것을 배제하는 데 도움을 주었다.