我在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);
}
答案 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;
}
}));
根据您的网格设置方式,有很多方法可以根据您的需要进行操作。发布你是如何动画的,这样我就可以看一看。基本上,您需要确切知道它何时完成动画,以便您可以再次启动扫描方法。