我为一个游戏编了这门课。它使用millis()
并且独立于frameRate
class Timer{
boolean increment, inProgress;
int spawn, end;
int seconds, tm_limit;
Timer(int tm_limit){
this.tm_limit = tm_limit;
seconds = tm_limit;
increment = false;
inProgress = false;
}
Timer(){
seconds = 0;
increment = true;
inProgress = false;
}
void start(){
inProgress = true;
spawn = millis();
}
void stop(){
inProgress = false;
end = millis();
}
int getSeconds(){
if(inProgress){
if(increment){
seconds = int((millis() - spawn) / 1000);
}
else{
if(seconds - int((millis() - spawn) / 1000) != seconds){
seconds = seconds - int((millis() - spawn) / 1000);
if(seconds <= 0) { stop(); }
else spawn = millis();
}
}
}
return seconds;
}
void reset(){
if(!increment)
seconds = tm_limit;
else
seconds = 0;
inProgress = false;
}
}
如果使用参数实例化 Timer 对象,则假定 Timer 应该减少。getSeconds()
否则,可以通过从方法中获取值来检查退出条件。