我在 Android 平台上开发的应用程序遇到了组织问题。该应用程序使用传感器作为输入,使用 OpenGL 作为输出。
- 传统的方法是 比如将项目组织成 我有主要 Activity 的 MVC 类加载一个 OpenGL View 和一个 传感器处理类,然后将 可能注册一些回调或 可能在时钟上做。
- 草率的替代方案是使用一个实现 GLSurfaceView 和 SensorEventListener 的类,然后将逻辑卸载到其他类中。
假设非常简单的绘图代码和稍微复杂的控制系统代码将尝试以 60 左右的 Hz 刷新。我正在寻找性能、可维护性和易于开发的影响,因此任何和所有输入都是有值(value)的。此外,在 Android 或移动开发方面,我完全是个新手,所以如果您能向我展示第三种替代方案,那也很棒。
最佳答案
有时候,过度计划可能会浪费时间。
不同的游戏使用不同的方法,您需要查看复制岛的开发博客和代码,了解有关如何使用 GLSurfaceView 组织代码的各种提示。 http://replicaisland.net/
我使用你的后一种方法,但它并不像你看起来那么草率。 您实际上不需要在 GLSurfaceView 中使用任何逻辑代码,只需在特定事件发生时调用您的类即可。 (onDraw、onTouch、onKey 等)
不确定这有什么草率的,我在他们适当的类中维护我的逻辑。 例如,在我的 onDrawFrame() 中,我只是执行 MyAreaManager.draw(gl)
MyAreaManager 类将维护它自己的逻辑并知道要绘制什么。
至于时钟,您很可能需要两个线程。一个用于渲染(GLSurfaceView 线程),一个用于以特定逻辑帧速率运行的游戏逻辑。
逻辑框架会简单地改变 Canvas 对象的状态,而绘制框架会尽可能快地绘制它们。
通过这种方式,您可以尽可能快地渲染并仍然保持稳定的逻辑帧速率。
关于java - 如何构建简单的 Android 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3610975/