LibGdx moveTo动作未执行

时间:2016-01-03 15:31:13

标签: java android libgdx

我正在制作一个应用程序,我有一个恼人的错误/错误:当我希望我的图像逐渐向上移动时,它什么都不做。以下是我的一些代码:

public void checkButtons(){
        MoveToAction moveUp = new MoveToAction();
        moveUp.setDuration(actionDuration);
        moveUp.setPosition(0, Gdx.graphics.getHeight());

        MoveToAction moveDown = new MoveToAction();
        moveDown.setDuration(actionDuration);
        moveDown.setPosition(0, Gdx.graphics.getHeight() - Gdx.graphics.getHeight() * 2);

        MoveToAction moveLeft = new MoveToAction();
        moveLeft.setDuration(actionDuration);
        moveLeft.setPosition(Gdx.graphics.getWidth() - Gdx.graphics.getWidth() * 2, 0);

        MoveToAction moveRight = new MoveToAction();
        moveRight.setDuration(actionDuration);
        moveRight.setPosition(Gdx.graphics.getWidth(), 0);
        if (goingUp == true){
            red_dot.addAction(moveUp);
            if (goingUp == false){
                red_dot.removeAction(moveUp);
            }
        }
        if (goingDown == true){
            red_dot.addAction(moveDown);
            if (goingDown == false){
                red_dot.removeAction(moveDown);
            }
        }
        if (goingLeft == true){
            red_dot.addAction(moveLeft);
            if (goingLeft == false){
                red_dot.removeAction(moveLeft);
            }
        }
        if (goingRight == true){
            red_dot.addAction(moveRight);
            if (goingRight == false){
                red_dot.removeAction(moveRight);
            }
        }

red_dot是一个图像,其余变量非常简单。 提前致谢。

1 个答案:

答案 0 :(得分:2)

要检查的一些事项:

  • 您是否正在呼叫stage.act()
  • 你的actionDuration非零吗?
  • 你确定那些坐标吗?如果你使用ScreenViewport,他们中的大多数看起来都会在屏​​幕外。如果你不是,为什么屏幕尺寸与你想要移动物体的位置有关?

似乎你对逻辑流程有一些误解。重复四次的代码结构没有意义:

if (someCriterion == true) {;
    doSomething();
    if (someCriterion == false) {
        //Code in here will never be called unless `doSomething()` immediately causes
        //someCriterion to become false as a side effect (which addAction() will not do).
    }
}

我猜你正在考虑在动作完成后调用addAction下的代码,或者重复调用它。但事实并非如此。如果要提前停止操作,则必须在代码中将goingUp等变量更改为false的位置删除它们。

但是如果你只是想删除完成的动作,那就没必要,因为这会自动发生。

此外,您不应该创建您可能没有使用的所有额外操作。你正在产生大量可能导致口吃的垃圾。只创建您肯定会使用的操作。而不是使用new MoveToAction(),而是使用Actions.moveTo()从池中获取所需的操作。然后它在完成时不会触发垃圾收集,因为Stage知道将池化的操作发送回池中进行回收。