0

我正在开发我的第一个游戏,并且我有一个FlxSprite具有死亡动画的玩家类 ( )。

我想在动画结束后立即将播放器从舞台上移除,但如果我使用:

player.animation.play('death');
remove(player);

动画没有结束,玩家就消失了。

4

2 回答 2

0

你的问题不是很清楚,但无论如何我都会尝试帮助。

由于游戏循环的循环方式,remove 函数会在动画播放之前杀死精灵。您可以通过在更新函数中添加 if 语句来检查动画何时完成,如下所示。

if (animation.finished) kill()

如果您需要实际的定时延迟,您可以查看我之前的答案,您可以在每次更新变量时增加一个变量,FlxG.elapsed直到它超过您的计时器长度。

我希望这回答了你的问题。您可能还想查看kill()HaxeFlixel 文档中的方法,因为我认为您可能会与remove().

编辑:非常抱歉,忘记包含一个重要细节。您很可能每帧都调用animation.play - 一旦您的死亡动画播放就停止。在我的代码中,我看到我有一个isDying变量可以停止任何新动画的启动,并检查当前动画是否完成。没有这个,finished 变量可能不会翻转。

于 2015-08-24T10:04:53.773 回答
0

我在大多数项目中处理这个问题的方式是这样的:

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.

于 2015-10-06T16:26:41.860 回答