游戏中的时间:
有没有办法使用其他System.Currentmillis()-starttime>XX
来更新游戏中的任何内容?它安全还是CPU昂贵?
在我的游戏中我有20个项目(移动方形顶点),当它达到60-70顶点时,FPS从60 FPS下降到30-40 FPS。 (在Galaxy S i9000手机上测试)。 有没有办法让我的游戏FPS将是30FPS?将我的游戏更新为30 FPS是否有用,或者我不需要处理这个? (因为较低的FPS会有一个滞后 - 它会很慢)
我可以随时以相同的速度运行我的对象吗?
最好的方法是:做phisyx,以及onDrawFrame中的所有stupp,或者:启动一个Thread为我做数学的是什么?什么是更快更好?
答案 0 :(得分:11)
游戏中的TIMING:有没有办法使用其他System.Currentmillis() - starttime> XX来更新游戏中的任何内容?它安全还是CPU昂贵?
您应该使用时间增量系统。有很多关于此的教程。这是一个非常好的教程:deWiTTERS Game Loop。
在我的游戏中我有20个项目(移动方形顶点),当它达到60-70顶点时,FPS从60 FPS下降到30-40 FPS。 (在Galaxy S i9000手机上测试)。有没有办法让我的游戏FPS将是30FPS?将我的游戏更新为30 FPS是否有用,或者我不需要处理这个? (因为较低的FPS会有一个滞后 - 它会很慢)
这取决于您使用的方法。如果是3D,则应考虑使用Vertex Buffer Objects
(VBO:s
)(如Vertex Array
,但在设备的GPU内存中)。这产生了巨大的差异,因为CPU不需要每次迭代都将数据从CPU复制到GPU。
如果是2D,您仍然可以使用VBO:s
,但如果推荐的设备支持draw_texture
。
但是,选项包括:
Vertex Arrays
(最慢)。Vertex Buffer Objects
(3D最快,比2D中的draw_texture
慢。)draw_texture
扩展名(2D中速度最快,但不会渲染3D内容)。 您可以支持所有这些方法来涵盖所有Android设备,但请记住检查设备的OpenGL
驱动程序的扩展名。有些人可能会支持所有这些,但有些设备只支持Vertex Arrays
和VBO:s
(例如)。
我已经回答了一个相关的问题here,但只是为了告诉你;这是Chris Pruett在Google I / O上的一个讲座:
我可以随时以相同的速度运行我的对象吗?
你做不到。 Android是一个多处理操作系统,您不知道发生了什么(可能另一个Service
应用程序正在更新?)。您可以做的是使用时间增量系统,就像我上面提到的那样。
最好的方法是:做phisyx,以及onDrawFrame中的所有stupp,或者:启动一个Thread为我做数学的是什么?什么是更快更好?
建议多线程(两个Thread
并行运行)。不久,在onDrawFrame
内完成您的绘图工作,并更新您自己创建的Thread
/ Runnable
内的内容。
推荐资源: