2012-05-15 39 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,但碰撞函數在某些情況下返回了誤報,但我沒有找出原因或時間。可能是一個錯誤。我搜索了一下,發現了這個帖子。諷刺的是,我已經回答了。所以我解決了這個問題。這次代碼被測試和工作

 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){} 
     }