Java 计时器使我的 libGdx 游戏崩溃

Java Timer crashes my libGdx game

我正在 libGdx 制作三消游戏。扫描匹配项后,我必须等待动画完成并 运行 再次扫描,直到不再有匹配项为止。我用 Java Timer 来做,当我在桌面上 运行 应用程序时它工作正常但在 Android 设备上它在一次、两次或几次迭代后崩溃。有什么想法吗?

    Timer animationTimer;

    scanForMatches(){
        //do some stuff
        //...

        checkAnimationComplete();
    }

    checkAnimationComplete(){
        animationTimer = new Timer();

        animationTimer.scheduleAtFixedRate(new TimerTask(){
            @Override
            public void run() {
                boolean animDone = true;

                // do some stuff to
                // check if anim done

                if (animDone){
                    animationTimer.cancel();
                    scanForMatches();
                } 
            }
        }, 1000, 100);
    }

在不查看您的其余代码的情况下,我强烈建议完全删除计时器,因为在这种情况下它几乎肯定是不必要的,而且效率不高。您是使用 Action 为舞台设置动画,还是根据 draw() 中的位置手动移动物体?如果你只是在 draw() 中移动一些东西,我会使用一个布尔标志来表示它已经到达目的地,就像你正在放下已解决的瓷砖或其他东西一样。如果您使用的是 Action,则可以使用新的 Action 作为回调,如下所示...

     myGem.addAction(Actions.sequence(
                    Actions.moveTo(230f, 115f, 0.25f, Interpolation.linear),
                    new Action() {
                        public boolean act(float delta) {
                            System.out.println("Done moving myGem!");
                             scanForMatches();
                            return true;
                        }
                    }));

根据您设置网格的方式,有多种方法可以满足您的需求。 Post 看看你是如何制作动画的,这样我就可以看看了。基本上,您需要确切地知道它何时完成动画,以便您可以再次启动扫描方法。