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 看看你是如何制作动画的,这样我就可以看看了。基本上,您需要确切地知道它何时完成动画,以便您可以再次启动扫描方法。
我正在 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 看看你是如何制作动画的,这样我就可以看看了。基本上,您需要确切地知道它何时完成动画,以便您可以再次启动扫描方法。