我的CountDownTimer有问题。情况是这样的:我不使用框架(谁需要一个框架,对不对?)(咳嗽)我有一个CountDownTimer跑步。此CountDownTimer用于计算玩家完成一个级别的时间,并在每100毫秒的滴答中更新屏幕。
在第一级,这很好,但在第二层,它每50毫秒滴答滴答,在第三层,每60/90/50毫秒滴答(是的,按重复顺序),使游戏行为公正和混乱的碰撞。我不知道这里发生了什么。
我已经排除了它是否依赖于级别,首先加载以后的级别,而在解决这些问题时,问题仍然会上升。然而,我已经指出了它的错误所在:在加载一个新级别的过程中,并且只有在那时;即使重新加载当前级别也不会导致这个错误。
我怀疑在这段代码中,有些东西并没有达到应有的效果:
public void prepareNewLevel(){
RelativeLayout rl = (RelativeLayout)findViewById(R.id.game);
level.clear();
movables.clear();
img_move.clear();
img_noMove.clear();
timerCount.cancel();
totalSolved = 0;
solvable = 0;
levelWidth = 0;
levelHeight = 0;
allCollided = false;
firstDraw = true;
rl.removeAllViewsInLayout();
}
级别、动产、img_move和img_noMove是列表项。
这是我的计时器:
MyCount update = new MyCount(15*1000, 100);
这是MyCount:
public class MyCount extends CountDownTimer{
public MyCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onTick(long millisUntilFinished) {
remaining_time = millisUntilFinished;
if(!loadingNewLevel)
MoveObjects();
}
@Override
public void onFinish() {
resetLevel = true;
upMotion = false;
downMotion = false;
leftMotion = false;
rightMotion = false;
update.start();
}
}
然后,在我的loadLevel()函数的末尾调用。我最初以为我有两个计时器同时运行,但写信给LogCat显示这是错误的,这意味着我每15秒收到一条整洁的“重置”消息,而不是在小于15秒的多个时刻。
这基本上就是问题所在。现在我知道它是在哪里引起的,问题是什么,我该如何解决呢?
-Zubaja
发布于 2014-12-10 06:09:31
您可以启动多个CountDownTimer吗?尝试在启动新的CountDownTimer之前停止现有的CountDownTimer。
发布于 2014-12-10 06:46:18
尝试使用计时器代替CountDownTimer:
// start timer inside your method
if( timer != null) timer.cancel();
timer = new Timer();
timer.scheduleAtFixedRate( new TimerTask()
{
@Override
public void run()
{
handler.obtainMessage( yourInegerMessage).sendToTarget();
}
}, 100, 15000);
// and define you handler
public Handler handler = new Handler( new Handler.Callback()
{
@Override
public boolean handleMessage( Message message)
{
// use 'message.what' as yourInegerMessage
// ...
return true;
}
});
// and stop your timer after first time
也许这能帮你。
https://stackoverflow.com/questions/27402914
复制相似问题