java - LibGdx moveTo 操作未执行

标签 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 是一个图像,其余变量非常简单。 提前致谢。

最佳答案

需要检查的一些事项:

  • 您正在调用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 的位置将其删除。

但是,如果您只是尝试删除已完成的操作,则没有必要,因为这是自动发生的。

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

关于java - LibGdx moveTo 操作未执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34578211/

相关文章:

java - 如何对所有 Spring 测试使用默认配置和默认测试监听器?

java - 如何在 libGDX 游戏中使用 Scoreloop 的奖励系统

java - assertTrue 在 JUnit 测试中给出 NPE,但文件不为空

java - 应用程序在 Android Studio 中崩溃。 getMenuInflater().inflate(R.menu.activity_main, 菜单);不存在?

java - 如何获取线性数组的坐标

java - 使用 google-guice 注入(inject)列表的最佳方法是什么?

java - 将 ImageView 的大小调整为另一个 ImageView 的大小的动画

android - RxJava - 如何在 Android 中的 4 个点击事件中调用订阅者

Android:检测 SD 卡何时作为磁盘驱动器安装到计算机

java - libGDX - 如何在特定位置停止玩家的移动?