我应该在OpenGL ES游戏中使用多个线程吗?

时间:2011-03-09 13:04:31

标签: iphone multithreading opengl-es

我正在开发一款包含一名玩家和许多敌人的iPhone游戏。我使用OpenGL ES来显示游戏视觉效果。

我有点困惑于我是否应该只使用一个线程或使用多个线程来移动和控制玩家和敌人。你对这个基本的游戏架构有什么建议?

2 个答案:

答案 0 :(得分:8)

我会在这个问题上不同意Max,并说你不应该完全忽略在你的应用程序中使用多线程。 OpenGL ES可以从后台线程中获取,但是您一次只能使用一个线程与OpenGL ES上下文进行通信。

Apple在其OpenGL ES编程指南中有一个名为“Concurrency and OpenGL ES”的整个部分。在此,他们描述了几种使用多线程提高OpenGL ES应用程序性能的方案。

通常,建议您从主线程中移除耗时的操作。主线程处理应用程序的用户界面,如果阻止,则会阻止标准UI元素更新和触摸事件注册。根据游戏幕后(物理,人工智能等)的处理程度,您可能需要将其中的大部分内容移动到后台线程。

多线程不是一个简单的主题,但Apple通过Grand Central Dispatch使这变得更容易,所以我强烈建议阅读他们的Concurrency Programming Guide,它描述了这个以及在你的应用程序中实现多线程的其他技术。另外,我在iOS开发课程中教授了多线程和GCD课程,其视频可以是found on iTunes U

随着Apple推出多核设备,利用多线程和GCD现在将为您带来巨大回报。

答案 1 :(得分:6)

这真的取决于很多事情。 首先,如果你使用多个线程,你将无法获得任何性能提升(因为所有现代iOS设备都有单核处理器,尽管iPad2有2个)。 第二个线程使任何应用程序都更加复杂,因为您必须跟踪共享资源,同步线程等等。

仅在您真正需要时才使用多个线程。例如,您从文件中将大量纹理加载到内存中,可能需要几秒钟。如果在执行渲染的同一线程上执行此操作,则所有渲染将在此时挂起。因此,最好在单独的线程上执行此操作,然后将加载的数据提供给主数据。或者您可以在具有更高更新速率的单独线程上更新物理(但是您只能在多个核心上受益)。

如果您是新手开发者并且制作一些简单的游戏,请不要使用多个线程。这些东西需要很多经验。