【问题标题】:libGDX actions: when they will executelibGDX 操作:何时执行
【发布时间】:2023-04-02 19:33:01
【问题描述】:

我的代码:

actor.addAction(Actions.sequence(
    Actions.fadeOut(0.3f),
    Actions.run(new Runnable(){
    @Override
    public void run() {
        Gdx.app.log(TAG,"after dispear");
    }
})));
actor.remove()

我发现此时动作序列不会执行。如果我再次添加演员,它会。谁能给我解释一下?

【问题讨论】:

  • 您正在删除演员,这可能是原因:p

标签: java libgdx action


【解决方案1】:
actor.addAction(Actions.sequence(
    Actions.fadeOut(0.3f),
    Actions.run(new Runnable(){
       @Override
       public void run() {
          Gdx.app.log(TAG,"after dispear");
       }
    }),
    Actions.removeActor()));
//actor.remove(); remove this line.

要删除动作链中的演员,请使用“Actions.removeActor”

【讨论】:

    【解决方案2】:

    您是在将演员添加到舞台,然后调用 act 函数吗?

    更多信息或代码会有所帮助。

    【讨论】:

      【解决方案3】:

      我想你的问题来自于不理解 LibGDX 动作的概念。

      如果您的目标是按顺序执行操作:

      • 淡出演员,
      • 记录发生的操作,
      • 移除演员

      那么你必须将actor.remove() 附加到序列中。

      否则,当您将代码保留为两个参与者的方法时:

      • addAction,
      • remove

      会一个接一个地执行。

      您编码为序列的所有操作(传递给addAction 方法)都设计为异步运行。 addAction 方法是非阻塞的,因此,在将所有序列添加到 actor 的逻辑之后,您将立即移除整个 actor,并且所有魔法都没有足够的时间来评估。

      从呈现的代码中删除最后一行,并在序列末尾添加removeActor 操作。

      【讨论】:

        猜你喜欢
        • 2013-08-27
        • 1970-01-01
        • 2017-02-21
        • 2012-01-14
        • 2022-06-17
        • 2014-02-01
        • 2012-09-20
        • 2016-03-26
        • 1970-01-01
        相关资源
        最近更新 更多