如何检测Android的Libgdx(0.9.7)中的动作结束

时间:2012-09-04 09:59:51

标签: android action libgdx

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

  1. 精灵移至目的地。
  2. 该动作包含许多MoveToActions或MoveByActions。
  3. 在上一个结束后执行以下操作。
  4. 在行动之前可以修改其余行动。
  5. 实际上,要点是如何在前一个结束之后采取下一个行动,我认为比较行为时间并不是一个明智的方法。

    任何人都可以帮助我吗?谢谢!

4 个答案:

答案 0 :(得分:41)

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

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

答案 1 :(得分: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)));

这将在他们完成后一个接一个地执行这些操作。

您可以在此处查看夜间文档以获取更多信息: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

答案 2 :(得分: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/

答案 3 :(得分:0)

使用Actions.run

Action action = Actions.sequence(
        Actions.delay(1f),
        Actions.run(new Runnable() {
            @Override public void run() {
                //  end of action
            }
        })
);