【发布时间】:2011-03-09 13:04:31
【问题描述】:
我正在开发一款包含一个玩家和许多敌人的 iPhone 游戏。我使用 OpenGL ES 来显示游戏的视觉效果。
对于我应该只使用一个线程还是使用多个线程来移动和控制玩家和敌人,我有点困惑。对于这个基本的游戏架构,您有什么建议?
【问题讨论】:
标签: iphone multithreading opengl-es
我正在开发一款包含一个玩家和许多敌人的 iPhone 游戏。我使用 OpenGL ES 来显示游戏的视觉效果。
对于我应该只使用一个线程还是使用多个线程来移动和控制玩家和敌人,我有点困惑。对于这个基本的游戏架构,您有什么建议?
【问题讨论】:
标签: iphone multithreading opengl-es
我不同意 Max 在这一点上的观点,并说您不应该完全忽略在应用程序中使用多线程。 OpenGL ES 可以从后台线程中绘制,但您一次只能使用单个线程与 OpenGL ES 上下文进行通信。
Apple 在他们的 OpenGL ES Programming Guide for iOS 中有一个完整的部分,标题为“Concurrency and OpenGL ES”。其中,他们描述了使用多线程提高 OpenGL ES 应用程序性能的几种方案。
一般来说,建议您将耗时的操作移出主线程。主线程处理应用程序的用户界面,如果您阻止它,您将阻止标准 UI 元素更新和触摸事件注册。根据您的游戏(物理、AI 等)在幕后进行的处理量,您可能需要将其中的大部分内容移至后台线程。
多线程不是一个简单的话题,但 Apple 通过 Grand Central Dispatch 使这变得更容易,所以我强烈建议阅读他们的Concurrency Programming Guide,其中描述了在您的应用程序中实现多线程的技术和其他技术。另外,我在iOS开发课程中教授了多线程和GCD课程,视频可以是found on iTunes U。
随着 Apple 推出多核设备,现在利用多线程和 GCD 将在未来为您带来巨大的回报。
【讨论】:
CLEAN LYRICS 评级。尽管它是 iPhone 编程。
这真的取决于很多事情。 首先,如果您使用多个线程,您将不会获得任何性能提升(因为所有现代 iOS 设备都有单核处理器,尽管 iPad2 有 2 个)。 其次,多个线程使任何应用程序变得更加复杂,因为您必须跟踪共享资源、同步线程等等。
仅当您确实需要时才使用多个线程。例如,您将大量纹理从文件加载到内存中,这可能需要几秒钟。如果您在执行渲染的同一个线程上执行此操作,那么所有渲染都将在此期间挂起。所以最好在单独的线程上执行此操作,然后将加载的数据提供给主线程。或者,您可以在具有更高更新率的单独线程上更新物理场(但您只能在几个内核上从中受益)。
如果您是新手开发人员并制作一些简单的游戏,请不要使用多线程。这东西需要很多经验。
【讨论】: