我有英雄投掷的剑(考虑它们的子弹),当它击中瓷砖地图时,使用kill()
方法杀死剑(子弹)。
但意外的事情发生了。当使用kill()
时,exists = false或者visible = false所有组都已消失(被杀或不可见)。
这些是一些片段:
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 :(得分:0)
这是因为你正在检查tilemap和'swords'组之间的碰撞,而不是剑的insance。这样,如果任何剑与tilemap发生碰撞,则为该组调用swordsHitLevel,而不是单个剑
你可能想要通过剑精灵进行迭代
for(var sword:BasicSword in swords.children() ){
FlxG.collide(level, sword, swordsHitLevel);
}
(代码未经过测试,如果需要,我可以稍后给你一个工作片段)
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){}
}