我正在开发我的第一个游戏,并且我有一个FlxSprite
具有死亡动画的玩家类 ( )。
我想在动画结束后立即将播放器从舞台上移除,但如果我使用:
player.animation.play('death');
remove(player);
动画没有结束,玩家就消失了。
我正在开发我的第一个游戏,并且我有一个FlxSprite
具有死亡动画的玩家类 ( )。
我想在动画结束后立即将播放器从舞台上移除,但如果我使用:
player.animation.play('death');
remove(player);
动画没有结束,玩家就消失了。
你的问题不是很清楚,但无论如何我都会尝试帮助。
由于游戏循环的循环方式,remove 函数会在动画播放之前杀死精灵。您可以通过在更新函数中添加 if 语句来检查动画何时完成,如下所示。
if (animation.finished) kill()
如果您需要实际的定时延迟,您可以查看我之前的答案,您可以在每次更新变量时增加一个变量,FlxG.elapsed
直到它超过您的计时器长度。
我希望这回答了你的问题。您可能还想查看kill()
HaxeFlixel 文档中的方法,因为我认为您可能会与remove()
.
编辑:非常抱歉,忘记包含一个重要细节。您很可能每帧都调用animation.play - 一旦您的死亡动画播放就停止。在我的代码中,我看到我有一个isDying
变量可以停止任何新动画的启动,并检查当前动画是否完成。没有这个,finished 变量可能不会翻转。
我在大多数项目中处理这个问题的方式是这样的:
override public function update(elapsed:Float):Void
{
if (!alive)
{
if (animation.finished)
{
exists = false;
}
super.update(elapsed);
}
// other update stuff...
super.update(elapsed);
}
override public function kill():Void
{
if (!alive || !exists)
{
return;
}
alive = false;
animation.play("death", true);
// Note: I DO NOT call super.kill() because I want to leave exists = true
}
而且,在您的 PlayState 或您想要删除对象的任何地方,只需检查一下if (!player.exists) remove(player);
,我猜?我通常不使用remove
,我只是等到状态被破坏,然后用FlxDestroyUtil
.