我正在构建Android游戏,我需要显示倒计时。为了让用户不作弊我无法在用户更改应用时停止此倒计时,因为他们会有更多时间来思考答案。
我需要做的是让CountDownTimer继续工作,即使我的应用程序当前不在前面(已调用onPause)。
我想知道我所拥有的代码(似乎有效)是否可以解决问题,或者在某些情况下它会失败。
现在倒计时继续,当它变为0时,结果屏幕显示在当前应用程序上(当然,这不是我想要的)。 我认为对于第二个问题,解决方案是存储变量或其他内容,并在启动结果屏幕之前检查它。
所以,总而言之,我想要的是即使用户更改当前应用程序也要继续倒计时,但当倒计时到0时,在用户返回游戏之前不要显示结果屏幕。 / p>
我的代码如下:
new CountDownTimer(10000, 1000) {
public void onTick(long millisUntilFinished) {
tvTime.setText(String.valueOf(millisUntilFinished / 1000));
}
public void onFinish() {
startActivity(new Intent(GameActivity.this, ResultActivity.class));
}
}.start();
谢谢。
答案 0 :(得分:0)
将它存储在一个变量中,只要它没有暂停就显示它似乎是最简单的解决方案。我要做的是在onPause方法中将一些全局变量设置为true,类似
if(!thatGlobalVariable)
{
displayVariable()
}
你知道我的意思,这是你的想法转发给你。
对不起,这没有多大帮助,你可能正在寻找其他更奢侈的解决方案。我会在此期间执行此操作,直到您得到更合适的答案。
此外,我认为如果在最小化时弹出超时消息,那将非常酷。所以这个人可能会在谷歌中查找某些东西然后突然“时间到了,你失败了”。人们喜欢那些折磨他们玩游戏的游戏。
答案 1 :(得分:0)
只是为了让您了解应该做些什么。可能应该使用SystemClock.elapsedTime()
。
public class CountdownTimer {
private final long startTime = currentTime();
private final long totalTime;
private boolean isFinished = false;
public CountdownTimer(long millis) {
totalTime = millis;
}
public long timeLeft() {
return totalTime - (currentTime() - startTime);
}
public boolean isFinished() {
return isFinished || (isFinished = timeLeft() < 0);
}
protected long currentTime() {
return System.currentTimeMillis();
}
}
如果用户关闭了您的应用,那么您不应该在其上重新打开它。让他们自己打开应用程序,发现他们的时间已到,或者显示通知。
答案 2 :(得分:0)
除了您在SavedInstance中保存的所有其他游戏状态外,您还可以节省当前时间。当用户恢复您的应用时,您可以将新时间与保存的值进行比较,以确定时间是否已到。然后可以显示该消息。