为android编写实时opengl-es游戏 - 一些问题(优化)

lac*_*cas 3 android opengl-es

1.

游戏中的时间:有没有办法使用其他System.Currentmillis()-starttime>XX来更新游戏中的任何内容?它安全还是CPU昂贵?

2.

在我的游戏中我有20个项目(移动方形顶点),当它达到60-70顶点时,FPS从60 FPS下降到30-40 FPS.(在Galaxy S i9000手机上测试).有没有办法让我的游戏FPS将是30FPS?将我的游戏更新为30 FPS是否有用,或者我不需要处理这个?(因为较低的FPS会有一个滞后 - 它会很慢)

我如何能够以相同的速度随时运行我的物体?

3.

什么是最好的方法:做phisyx,和onDrawFrame中的所有stupp,或者:启动一个Thread为我做数学的是什么?什么是更快更好?

Wro*_*lai 11

游戏中的时间:有没有办法使用其他System.Currentmillis() - starttime> XX来更新游戏中的任何内容?它安全还是CPU昂贵?

您应该使用时间增量系统.有很多关于此的教程.这是一个非常好的教程:deWiTTERS游戏循环.

在我的游戏中我有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最快,比draw_texture2D 慢).
  • draw_texture 扩展(在2D中最快,但不渲染3D内容).

您可以支持所有这些方法来涵盖所有Android设备,但请记住检查设备OpenGL驱动程序的扩展名.有些人可能支持所有这些,但可能只有支持Vertex ArraysVBO:s(例如)的设备.

我在这里回答了一个相关的问题,但只是为了告诉你; 这是Chris Pruett在Google I/O上的一个讲座: 画画的东西

我如何能够以相同的速度随时运行我的物体?

你不能.Android是一个多处理操作系统,你不知道发生了什么(也许另一个Service应用程序正在更新?).您可以做的是使用时间增量系统,就像我上面提到的那样.

什么是最好的方法:做phisyx,和onDrawFrame中的所有stupp,或者:启动一个Thread为我做数学的是什么?什么是更快更好?

建议多线程(两个Thread并行运行).不久,做你的绘图内容onDrawFrame并更新你自己创建的Thread/中的东西Runnable.

推荐资源: