我正在设计一款游戏,并且在倒计时器停止时会出现问题。计时器正常启动,应该在end()方法中停止。当ENEMY_HULL被检查为0或更小时,它运行良好,当用户按下按钮时会单独调用,并且调用checkEnemyDefeat(),但是当ENEMY_CREW为0时它不起作用。在这两种情况下,日志中的消息cat表示计时器停止出现,所以我的猜测是.cancel()被调用。我已经包含了所有相似的代码。
注意:包括CountDownTimer在内的所有变量都是全局变量
以下是包含计时器的方法:
this
接下来是crewFightCalculator方法:
private void BadGameLoop() {
if (GAME_PAUSED == true && !GAME_TIME_STARTED) {
Log.d(" -------- ", "TIMER STARTED");
GAME_PAUSED = false;
GAME_TIME_STARTED = true;
gameTimer = new CountDownTimer(GAME_TIME, UPDATE_RATE) {
@Override
public void onTick(long millisUntilFinished) {
TICKS++;
timer.setText(String.valueOf(GAME_TIME / 1000 - TICKS / 10));
if((CREW_BOARDING > 0 || ENEMY_CREW_BOARDING > 0) && TICKS%10 == 0){
crewFightCalculator();
}
updateViews();
}
@Override
public void onFinish() {
TICKS=0;
GAME_TIME_STARTED = false;
GAME_PAUSED = true;
end();
}
};gameTimer.start();
}
}
checkEnemyDefeat和end方法:
private void crewFightCalculator(){
// this just changes the values of ENEMY_CREW (global variable) and then
//calls checkEnemyDefeat() to verify if it should end the timer or not
checkEnemyDefeat();
}
对我来说,为什么它不起作用,这简直太棒了。我唯一的猜测是它与.cancel()不是由用户输入启动的一系列函数触发这一事实有关。
答案 0 :(得分:0)
我发现这个问题的唯一解决办法就是修改onTick方法,以便每次都应检查它是否应该运行或停止计时器,如下所示:
private void BadGameLoop() {
if (GAME_PAUSED == true && !GAME_TIME_STARTED) {
Log.d(" -------- ", "TIMER STARTED");
GAME_PAUSED = false;
GAME_TIME_STARTED = true;
gameTimer = new CountDownTimer(GAME_TIME, UPDATE_RATE) {
@Override
public void onTick(long millisUntilFinished) {
if(GAME_TIME_STARTED) {
TICKS++;
timer.setText(String.valueOf(GAME_TIME / 1000 - TICKS / 10));
if((CREW_BOARDING > 0 || ENEMY_CREW_BOARDING > 0) && TICKS%10 == 0){
crewFightCalculator();
}
updateViews();
}else{
gameTimer.cancel();
}}
@Override
public void onFinish() {
TICKS=0;
GAME_TIME_STARTED = false;
GAME_PAUSED = true;
end();
}
};gameTimer.start();
}
}
尽管如此,我还是无法弄清楚为什么它之前没有正常工作。