3
我需要为小游戏实现毫秒精度计时器。哪种方法最适合这个?我目前的做法是使用System.currentTimeMillis()。它似乎工作得不错,但也许有一些我不知道的陷阱。标准的计时方法是什么?Android简单计时问题
我需要为小游戏实现毫秒精度计时器。哪种方法最适合这个?我目前的做法是使用System.currentTimeMillis()。它似乎工作得不错,但也许有一些我不知道的陷阱。标准的计时方法是什么?Android简单计时问题
你的计时器只会和你的系统一样好。它根本不会比这更好。作为一名前职业游戏开发者(并且仍然在做副作用),我建议不要超过毫秒级的精度要求。你可能不需要它。
用此程序确定您的时钟精度:
/*
C:\junk>javac TimerTest.java
C:\junk>java TimerTest
Your delay is : 16 millis
C:\junk>
*/
class TimerTest {
public static void main(String[] args) {
long then = System.currentTimeMillis();
long now = then;
// this loop just spins until the time changes.
// when it changes, we will see how accurate it is
while((now = System.currentTimeMillis()) == then); // busy wait
System.out.println("Your delay is : " + (now-then) + " millis");
}
}
好像很多事情可能会影响程序的输出如上下文切换。我认为你没有对'currentTimeMillis'准确度施加太大的压力是正确的。 – 2011-03-25 21:19:44
@Matthew,你说的没错。当然,当我运行它很多次(数百次)时,我会得到一致的16或17,从不变化。你提出了我试图做的确切的观点:不要依赖'currentTimeMillis'的准确性。 – corsiKa 2011-03-25 22:04:55
感谢您的数据。知道这很有趣! – 2011-03-25 22:06:09