我在网络上,在游戏代码中找到了这些说明。但是,我不明白它是如何工作的。
start = System.nanoTime();
elapsed = System.nanoTime() - start;
wait = (100/60) - (elapsed / 1000000);
if(wait < 0)
{
wait = 4;
}
try
{
Thread.sleep(wait);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
我知道Thread.sleep(wait)
使线程在开始之前以毫秒为单位等待wait
。但在这种情况下,为什么要烦恼所有这些指示呢?我尝试放Thread.sleep(0)
,游戏速度快20倍(所有物体移动得太快)。
这些说明如何运作?
提前致谢。
答案 0 :(得分:0)
基本上,Thread.Sleep()
所做的是冻结代码运行的线程,在这种情况下,冻结应用程序的主线程。
想想它就像你的程序一样:
做点什么....
等待X时间(“冻结”程序执行)
做点别的事。
try/catch
操作与您看到的延迟无关。
基本上,try/catch
就像一个“捕手”,如果线程冻结出现问题(在这种情况下,可能出错的是“某人”(即另一个线程)会试图中断冻结线程)。
在这种情况下,使用简单的单词,它将“跳转”并执行catch块中编写的代码,防止程序崩溃(将其视为保护层)。
如果你删除了try / catch块,那么在上面描述的异常情况下,没有什么可以防止系统崩溃,你的程序会爆炸(好吧,它不会,不要惊慌失措。:P )。