我正在开发一款iPhone游戏,其中包含一个玩家和许多敌人。我使用OpenGL ES来显示游戏画面。 我有点困惑,是应该只使用一个线程还是使用多个线程来移动和控制玩家和敌人。对于这种基本的游戏架构,你有什么建议呢?
我不同意Max的看法,认为你在应用程序中不应完全忽略使用多线程。OpenGL ES可以从后台线程绘制,但一次只能使用单个线程与OpenGL ES上下文通信。苹果在iOS OpenGL ES编程指南中有一个名为“Concurrency and OpenGL ES”的完整部分。其中,他们描述了使用多线程提高OpenGL ES应用程序性能的几种情况。一般来说,建议将耗时操作移到主线程之外。主线程处理应用程序的用户界面,如果阻塞该线程,则会防止标准UI元素更新和触摸事件注册。根据游戏背后正在进行的处理量(物理、人工智能等),您可能需要将其中的大块移至后台线程。多线程并不是一个简单的话题,但是苹果通过Grand Central Dispatch使这变得更加容易,因此我强烈建议阅读他们的Concurrency Programming Guide,其中描述了实现应用程序中多线程和其他技术的方法。此外,我在iOS开发课程中教授了关于多线程和GCD的课程,视频可以在iTunes U上找到。随着苹果推出多核设备,现在利用多线程和GCD将为您在未来带来巨大的回报。
这真的取决于很多事情。 首先,如果您使用多个线程(因为所有现代iOS设备都有单核处理器,尽管iPad2有2个),则不会获得任何性能提升。 其次,多个线程使任何应用程序变得更加复杂,因为您必须跟踪共享资源,同步线程等等。只有在确实需要时才使用多个线程。例如,您从文件中将许多纹理加载到内存中,可能需要几秒钟。如果您在执行渲染的同一线程上执行此操作,则所有渲染都会挂起。因此最好在单独的线程上执行此操作,然后将加载的数据传递给主线程。或者您可以在具有更高更新速率的单独线程上更新物理(但仅在多个核心上才受益)。如果您是初学者开发人员并制作一些简单的游戏,请勿使用多个线程。这需要很多经验。