2012-05-15 3 views
0

영웅이 던진 칼 (총알이라고 생각하십시오)을 사용하여 타일 맵에 닿으면 검 (총알)이 죽습니다 kill() 방법. 하지만 예기치 않은 일이 일어났습니다. kill()을 사용하는 경우 exists = false 또는 visible = false 그룹의 모든 항목이 사라집니다 (살해되거나 보이지 않음).FlxG.collide() 콜백 함수에서 : 그룹에서 항목을 죽이면 그룹의 나머지 부분이 죽습니다.

Sword.as(base class for all swords) shoot function : 
public function shoot(playerPosition:FlxPoint, direction:uint):void{ 
    if(!alive || !exists){ 
    revive(); 
    } 
    x = playerPosition.x; 
    y = playerPosition.y; 
    if(direction == FlxObject.RIGHT) {     
    angularVelocity = 900; 
    velocity.x = 400; 
    } else { 
    angularVelocity = 900; 
    velocity.x = -400; 
    } 
} 

Sword(BasicSword)의 서브 클래스는 언급 할 가치가되지 않도록에만 칼 그래픽이 있습니다
이 어떤 조각입니다.

PlayState.as 
create (only part of it):  

for(var i:int = 0; i < 15;i++) { 
    sword = new BasicSword(-200, -200); 
    swords.add(sword); 
} 
add(swords); 

업데이트 :

override public function update():void{ 
    if(FlxG.keys.justPressed("X")) { 
    (swords.recycle(BasicSword) as BasicSword).shoot(new FlxPoint(player.x, 
     player.y),player.facing); 
    } 

    super.update(); 
    FlxG.collide(level, player);//make the player stand on the level. 
    FlxG.collide(level, swords, swordsHitLevel); 
} 

swordsHitLevel(callback function): 
public function swordsHitLevel(level:FlxTilemap, sword:FlxSprite):void { 
    sword.kill();   
} 
+0

해결 방법을 찾으셨습니까? – yannicuLar

답변

0

당신이 tilemap하고 '칼'그룹 대신 칼 insance 사이의 충돌을 확인하고 있기 때문에이 발생합니다. 검의이 tilemap와 충돌하는 경우이 방법은 다음 swordsHitLevel는 그룹이 아닌

당신이 코드는

for(var sword:BasicSword in swords.children()){ 
    FlxG.collide(level, sword, swordsHitLevel); 
} 

(칼 스프라이트를 반복 할 수 있습니다 개별 칼을 촉구한다 테스트를 거치지 않은 상태에서 나중에 필요한 작업 조각을 줄 수 있습니다.

편집 : 나는 오늘이 문제에 스스로 빠졌습니다. FlxGroup 대신에 콜백이 멤버별로 호출되었다고 확신 할지라도 충돌 함수는 어떤 경우에는 오탐 (false positive)을 리턴하지만, 왜 또는 언제인지 알 수는 없습니다. 버그 일 수 있습니다. 나는 주위를 인터넷 검색 하고이 게시물을 발견. 아이러니하게도 나는 이미 그것에 대답했다. 그래서 나는 그 일을 해결했다. 이번에는 코드를 테스트하고 작동합니다.

 for (var i:int = 0; i < swords.members.length; i++) { 
      try{ 
       var sword:BasicSword= (BasicSword)(swords.members[i]); 
       FlxG.collide(this.map, sword, swordsHitLevel); 

      }catch (err:Error){} 
     } 
관련 문제