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

时间:2011-03-12 10:04:47

标签: 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为我做数学的是什么?什么是更快更好?

1 个答案:

答案 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 ObjectsVBO: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 ArraysVBO:s(例如)。

我已经回答了一个相关的问题here,但只是为了告诉你;这是Chris Pruett在Google I / O上的一个讲座: drawing stuff

  

我可以随时以相同的速度运行我的对象吗?

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

  

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

建议多线程(两个Thread并行运行)。不久,在onDrawFrame内完成您的绘图工作,并更新您自己创建的Thread / Runnable内的内容。

推荐资源: