通常游戏是使用无限循环创建的,它由两种主要方法构成:
while(true) {
update();
paint();
}
我在java中只写了3行:
long start = System.nanoTime();
List<? super HashMap<String, String>> list = new LinkedList<HashMap<String, String>>();
long end = System.nanoTime();
然后我显示执行这样的操作的时间,我得到: 1 ms,323 us和48 ns。
游戏流畅,如果至少有30帧/秒,那么在1秒内,一帧的时间:33毫秒。
如果像创建容器这样简单的操作占用一帧的3%的时间,那么如何编写流畅的游戏呢?只有一次操作占用了3%的时间,如果应用程序复杂化,几乎不可能在33毫秒内计算和绘制所有内容。
通常在游戏中update()
的调用次数比paint()
更少?
答案 0 :(得分:2)
正如Jim Garrison在评论中提到的,当JVM启动时,事情运行得更慢。这是由于许多因素,包括“及时”编译或JIT ...仅仅几行代码的分析基本上没有意义......应用程序启动后运行的相同代码行可能只需要一小部分代码如果他们孤立地运行,他们会花时间。
此外,(慢)初始化大数据结构通常在游戏更新循环开始之前完成。
也可以使用多线程进行后台加载和资源初始化......虽然通常只是在级间菜单屏幕中预加载所有内容是可以接受的。
现代游戏循环通常比你的例子复杂得多:
例如,诸如迷你地图之类的东西通常以较低的频率更新或者每帧仅部分更新,而物理通常需要以高于绘画周期的采样率运行。