游戏中的计时:是否有其他方法可以使用 System.Currentmillis()-starttime>XX 来更新游戏中的任何内容?安全还是CPU贵?
您应该使用时间增量系统。有很多关于这方面的教程。这是一个非常好的教程:deWiTTERS 游戏循环 http://www.koonsolo.com/news/dewitters-gameloop/.
在我的游戏中,我有 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
but if draw_texture
推荐的设备支持。
但是,选项是:
-
Vertex Arrays
(最慢)。
-
Vertex Buffer Objects
(3D 中最快,慢于draw_texture
in 2D).
-
draw_texture
扩展(2D 速度最快,但不渲染 3D 内容)。
您可以支持所有这些方法来覆盖整个 Android 设备范围,但请记住检查设备的扩展名OpenGL
司机。有些设备可能支持所有这些,但有些设备可能只支持Vertex Arrays
and VBO:s
(例如)。
I've answered a related question here https://stackoverflow.com/questions/5169338/android-deciding-between-surfaceview-and-opengl-glsurfaceview/5169425#5169425, but just to show you; here's a print from one of Chris Pruett's lectures at Google I/O:
我怎样才能让我的对象在任何时候都以相同的速度运行?
你不能。 Android 是一个多处理操作系统,你不知道发生了什么(也许是另一个Service
应用程序正在更新?)。您可以做的是使用时间增量系统,就像我上面提到的那样。
最好的方法是什么:做 phisyx,以及 onDrawFrame 中的所有 Stupp,或者:启动一个线程 对我来说数学是什么?什么是更快更好?
建议多线程(两个Thread
并行运行)。很快,在里面做你的绘画工作onDrawFrame
并更新您自己创建的内容Thread
/Runnable
.
推荐资源:
-
2009 年谷歌 I/O 大会 http://www.youtube.com/watch?v=U4Bk5rmIpic and 谷歌 I/O 2010 http://www.youtube.com/watch?v=7-62tRHLcHk
- Android 游戏开发:快速入门 http://android-developers.blogspot.com/2010/06/game-development-for-android-quick.html