游戏的计时器生成随机数而不是倒计时

时间:2012-12-28 11:52:51

标签: java android

我正在写一款Android游戏。主游戏屏幕有一个倒数计时器,当它达到零时游戏结束。下面的代码在用户第一次播放关卡时起作用。然而,大约每五次用户播放第二级时,产生的数字变得随机,例如,它从30开始然后到-15。任何人都可以提出任何理由这样做吗?

public class Timer1 {
int time = 120;
int counter = 0;
int startTime = 30; // Change to 2 minutes
Timer timer;

boolean end = false;

World world = new World();

public Timer1() {

}

public void subtractTime() {
    startTime = startTime - 15; // Knock off 15 seconds for hint
}

public int getTime() {
    return time;
}

public void startTimer() {
    timer = new Timer();
    time = 120;
    startTime = 30;
    end = false;
    timer.scheduleAtFixedRate(new TimerTask() {
        public void run() {
            counter++;
            time = startTime - counter;
            if (time == 0) {
                world.gameOver = true;
                end = true;
                timerCancel();
            }
        }
    }, 0, 1000);
}

public void timerCancel() {
    timer.cancel();
}

}

3 个答案:

答案 0 :(得分:1)

你永远不会把你的计数器重置为0,如果你没有每次实例化这个类,那么这个数字就会上升。

public void startTimer() {
    timer = new Timer();
    time = 120;
    startTime = 30;
    counter = 0; // NEW CODE
    end = false;
    timer.scheduleAtFixedRate(new TimerTask() {
        public void run() {
            counter++;
            time = startTime - counter;
            if (time == 0) {
                world.gameOver = true;
                end = true;
                timerCancel();
            }
        }
    }, 0, 1000);
}

但你正在做的是调用startTimer,但你的'重置计时器'。即重置所有变量然后你正在启动计时器。如果你每次只做new Timer1().startTimer()会更容易,它也会让你的代码更容易阅读维护。

此外,如果您的数学已关闭且时间不等于0但小于0,那么您的计时器会继续。小心。 if (time == 0) {

试试这个:

 if (time <= 0) {

答案 1 :(得分:0)

您没有重置counter。如果time == 0未达到终止条件,则结束等级。

此外,您假设标记上每秒都会调用TimerTask。通常,这种假设是错误的。如果您的游戏需要CPU时间,TimerTask的执行可能会延迟。因此,请考虑记住启动时的系统时间(System.currentTimeMillis()),并检查每次连续调用TimerTask已经过了多长时间,并根据该时间而不是计数器来确定时间是否到了。

答案 2 :(得分:0)

如果您使用HandlerHandler.postDelayed方法,您的代码会更容易。

查看Android Docu