9

在最新版本的Libgdx(0.9.7或libgdx-nightly-20120904)中,动作监听器被移除了。所以我不知道如何有效地完成我的功能:

  1. 精灵移动到目的地。
  2. 运动包含许多 MoveToAction 或 MoveByAction。
  3. 在前一个动作结束后执行以下动作。
  4. 其余动作可以在动作之前修改。

其实重点是在前一个动作结束后如何进行下一个动作,我认为比较动作时间不是一个明智的方法。

有谁能够帮我?谢谢 !

4

4 回答 4

43

不确定这是否回答了您的问题,但这是模拟“动作完成侦听器”的一种方法:

Action completeAction = new Action(){
    public boolean act( float delta ) {
        // Do your stuff
        return true;
    }
};

Action actions = sequence(fadeIn(1f), fadeOut(1f), completeAction);

(来源:http ://steigert.blogspot.com.br/2012/07/13-libgdx-tutorial-libgdx-refactoring.html )

于 2013-02-26T10:43:13.300 回答
9

我认为最好的方法是保持简单。您可以使用以下方式轮询演员是否还有任何动作

if (actor.getActions().size > 0) {no actions left!!} 

放置该代码的好地方是靠近 actor.act();

无论如何,您可以使用 sequenceAction 执行一系列操作:

import static com.badlogic.gdx.scenes.scene2d.actions.Actions.*; 
...
actor.addAction(sequence(moveTo(200, 100, 2), moveBy(20,30, 3), delay(0.5f), rotateTo(180, 5)));

这将在完成时一个接一个地执行这些动作。

您可以在此处查看 nightlies 文档以获取更多信息:http ://code.google.com/p/libgdx/wiki/scene2d

那是你需要的吗?(我不确定我是否理解第 4 步)。

如果您需要更具体的内容,请再次询问。您还可以查看 Actor 类源代码,以更好地了解操作的处理方式。 https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/scenes/scene2d/Actor.java

于 2012-09-04T15:07:08.347 回答
3

libgdx 0.9.7

Action a = new Action();
render(){
   if (a.getTime >= a.getDuration())
      Gdx.app.log("a", "is done");
}

检查操作中的警告已完成:

尽管

delayAction.getTime > 0 和 (delayAction.getTime < delayAction.getDuration)

然后

alpha.getTime > alpha.getDuration

直到

delayAction.getTime > delayAction.getDuration。

例子:

AlphaAction alpha = new AlphaAction();
alpha.setAlpha(0.2f);
alpha.setDuration(1);

DelayAction delayAction = new DelayAction();
delayAction.setDuration(1);

SequenceAction sequenceAction = new SequenceAction();
sequenceAction.addAction(alpha);
sequenceAction.addAction(delayAction);

更多在http://congdongandroid.vn/

于 2013-01-03T09:43:22.490 回答
1

使用Actions.run

Action action = Actions.sequence(
        Actions.delay(1f),
        Actions.run(new Runnable() {
            @Override public void run() {
                //  end of action
            }
        })
);
于 2020-09-29T20:34:33.550 回答