我想制作关于迷你游戏的应用程序。 细节:如果你没有回答或答案错误,你必须在2秒内回答问题 - >游戏结束 。但如果你的答案是真的,那么定时器将重置为0并再次倒计时带有不同的问题。
我已经在网站上看到很多关于计时器的代码,但我不清楚它:(
所以我想问:如何设置一个只运行2秒的计时器,我该如何重置它并继续提出新问题?
请帮帮我。
答案 0 :(得分:1)
你可以在android中使用CountDownTimer:
public class Myclass {
myTimer timer =new myTimer(2000,1000);
public void creatQuestion(){
timer.start();
//method you init question and show it to user
}
public void getUserAnswer(/*evry thing you expected*/)
{
//if answer is true call timer.start()
//else call timer.onFinish(); to run onfinish in timer
}
public class myTimer extends CountDownTimer {
public myTimer(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onTick(long millisUntilFinished) {
// you can update ui here
}
@Override
public void onFinish() {
this.cancel();
//fire game over event
}
}
}
我希望它让你满意
答案 1 :(得分:0)
我使用Thread / Runnable完成了类似的操作。
Thread t = new Thread(new Runnable() {
public void run() {
final long startTime = getTime();
final long maxEndTime = startTime + 2000L;
try {
while (shouldContinueWaiting()) {
if (getTime() > maxEndTime) {
throw new TimeoutException();
}
sleep();
}
} catch (InterruptedException e) {
handleInterrupt();
} catch (TimeoutException e) {
handleTimeout();
}
}
boolean shouldContinueWaiting() {
// Has the user already answered?
}
void handleInterrupt() {
// The user has answered. Dispose of this thread.
}
void handleTimeout() {
// User didn't answer in time
}
void sleep() throws InterruptedException {
Thread.sleep(SLEEP_DURATION_IN_MILLIS);
}
void getTime() {
return System.currentTimeMillis();
}
然后您可以通过以下方式启动/重启线程:
t = new Thread(same as above...);
t.start();
并停下来:
t.interrupt();
答案 2 :(得分:-1)
您可以使用处理程序。
Handler h = new Handler();
h.postDelayed(new Runnable() {
@Override
public void run() {
//this will happen after 2000 ms
}
}, 2000);
答案 3 :(得分:-1)
也许这可以帮到你:
Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
// FIRE GAME OVER
handler.postDelayed(this, 2000); // set time here to refresh textView
}
});
答案 4 :(得分:-1)
我们想要使用Timer类。
private Timer timer;
当你准备让计时器开始计时时 - 让我们说是你按下某个按钮后 - 这样做是为了启动计时器:
timer = new Timer();
timer.scheduleAtFixedRate(incrementTime(), 0, 100);
第一行是我们创建一个新的Timer。很标准。然而,第二行是我希望你看到的那一行。
incrementTime()是在时钟的每个“tick”结束时调用的方法。可以随意调用此方法,但必须返回TimerTask的实例。如果你愿意,你甚至可以创建一个匿名界面,但我更喜欢把它移到它自己的代码部分。
0是我们的起始位置。我们从这里开始计算。简单。
100是时钟的“滴答”大小(以毫秒为单位)。这里,它是每100毫秒,或每1/10秒。我在编写这段代码时使用了这个值,因为我正在制作一个秒表应用程序,我希望我的时钟每0.1秒更换一次。
至于你的项目,我建议让计时器的任务成为你的问题切换方法。每2000毫秒或2秒发生一次。