Java Timer崩溃了我的libGdx游戏

时间:2015-04-07 12:36:37

标签: java timer libgdx

我在libGdx上制作match3游戏。扫描匹配后,我必须等待动画完成并再次运行扫描,直到不再有匹配为止。我是用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);
    }

1 个答案:

答案 0 :(得分:0)

在没有查看其余代码的情况下,我强烈建议完全放弃计时器,因为在这种情况下几乎肯定是不必要的,并且效率不高。您是否使用动作来为舞台设置动画,或者您是否根据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;
                        }
                    }));

根据您的网格设置方式,有很多方法可以根据您的需要进行操作。发布你是如何动画的,这样我就可以看一看。基本上,您需要确切知道它何时完成动画,以便您可以再次启动扫描方法。