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

2023-11-30

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

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


我在这一点上不同意 Max 的观点,并表示您不应该完全忽略在应用程序中使用多线程。 OpenGL ES 可以从后台线程进行绘制,但一次只能使用一个线程与 OpenGL ES 上下文进行通信。

Apple 有一个完整的章节标题为“并发和 OpenGL ES” 在他们的 iOS OpenGL ES 编程指南中。其中,他们描述了使用多线程提高 OpenGL ES 应用程序性能的几种场景。

一般来说,建议您将耗时的操作移出主线程。主线程处理应用程序的用户界面,如果您阻止该线程,您将阻止标准 UI 元素更新和触摸事件注册。根据游戏后台执行的处理量(物理、AI 等),您可能需要将其中的重要部分移动到后台线程。

多线程不是一个简单的主题,但 Apple 通过 Grand Central Dispatch 使这变得更加容易,所以我强烈建议阅读他们的并发编程指南它描述了在应用程序中实现多线程的这种技术和其他技术。此外,作为 iOS 开发课程的一部分,我教授了多线程和 GCD 课程,该课程的视频可以在在 iTunes U 上找到.

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该在 OpenGL ES 游戏中使用多线程吗? 的相关文章

  • 连接广播而不是服务器后AsyncUdpSocket接收数据的小问题

    我的 AsyncUdpSocket 有问题 我曾经连接到服务器 发送一些数据并获得一些响应 现在 由于我不知道服务器的实际地址 我不得不更改代码并将数据发送到广播地址 255 255 255 255 这是我的代码 NSString bcho
  • IOS:从故事板中的原型单元中触发多个segues

    有没有办法将原型单元连接到不同的场景 并在 didSelectRowAtIndexPath 方法上调用 self PerformSegueWithIdentifier NAMEOFTHESEGUE sender self 我似乎无法将多个
  • AVPlayer 无法从音乐库中播放

    我正在尝试使用 AVPlayer 播放 iPhone 音乐库中的歌曲 一切似乎都准备好了 但播放器根本不会发出任何声音 我已经为此苦苦挣扎了一段时间 任何帮助将不胜感激 注意 我意识到我可以使用 AVAudioPlayer 但我想直接从我的
  • 在 iPhone 模拟器中设置当前用户位置

    有没有办法在 Xcode 4 上的 iPhone 模拟器中设置当前用户位置 我希望模拟器显示除库比蒂诺之外的其他位置 是的 从模拟器的菜单中选择Debug gt Location gt Custom Location
  • 如何用动画隐藏/显示 UISearchBar 范围栏?

    我想在表格为空时 在搜索栏第一次编辑之前 不显示范围栏 在编辑时不显示范围栏 最后在编辑完成时显示它 我了解 UISearchBarDelegate 协议 但我不知道如何用动画显示 隐藏范围栏 我知道 UISearchBar 有setSho
  • 选择 MapView 注释两次

    我的 iPhone 应用程序有一个地图视图 其中有大量位置可供用户选择 我希望他能够点击其中一个注释来显示其标注视图 然后再次实际选择它 问题是 didSelectAnnotationView 只被调用一次 那么如何检测已选择的注释的选择呢
  • UIDatePicker 仅显示月份和日期

    我想要一个UIDatePicker用户可以选择月份和日期 但不能选择年份 我知道闰年有额外的一天 所以为了简单起见 让我们把这一天扔掉 有没有办法删除年份列或有 2 个带有月 日的卷轴 其作用类似于UIDatePicker 所选月份中不存在
  • 什么样的应用程序需要多线程?

    什么是一些具体的例子需要或不需要多线程的应用程序 但这样会更好吗 如果答案以每个帖子一个申请的形式最好 这样最适用的就会浮到顶部 没有硬性且快速的答案 但大多数时候 您不会看到工作流程 计算是连续的系统有任何优势 然而 如果问题可以分解为可
  • Java 同步计数器 - get() 怎么样?

    众所周知这么简单x 不是原子操作 实际上是读 增量 写操作 这就是为什么它应该同步 但是关于get 我读过它也应该同步 但有人能解释一下为什么吗 通过引入来避免内存一致性错误happens before关系 当出现以下情况时该怎么办get
  • 将 NSData 转换为 JSON

    我有一个NSData对象 我需要将其转换为NSDictionary object NSData data 现在我需要将其转换为NSDictionary 我如何以编程方式执行此操作 注意 我保存后NSData to the NSDiction
  • 使用 UIImage 和 caf 创建视频文件的问题

    我已经阅读了在互联网上可以找到的所有关于此功能的帖子 并且我在创建视频文件方面取得了一些成功 但我还剩下 3 个问题 而且似乎没有人提到过这一点 我有 3 个问题 视频在某些播放器上无法正常播放 quicktime window 视频只播放
  • 如何通过 HTTP POST 发送充满对象的 NSArray?

    我在 iPhone 端有一个产品 购物清单 由具有名称 product id 等的产品对象组成 我希望将此列表发送到服务器 在那里我将服务器上的列表与 iphone 中的列表进行比较 以合并所做的更改并将合并的列表发送回 iphone 如何
  • 为什么我的多线程 C 程序在 macOS 上无法运行,但在 Linux 上却完全正常?

    我用 C 语言编写了一个多线程程序 使用 pthreads 来解决 N 皇后问题 它使用生产者消费者编程模型 一位生产者创建所有可能的组合 一位消费者评估该组合是否有效 我使用一个共享缓冲区 一次可以保存一个组合 一旦我有 2 个以上的消费
  • 分发证书错误:“此证书尚未有效。” [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我已从 itunesconnect 网站下载了分发证书 通过双击 我将其添加到钥匙串访问中 但在钥匙串访问中 它显示 此证书尚未有效 那么问题出在哪里
  • ASIHTTP:上传 UIImage?

    有人可以告诉我如何在 Objective c 中使用 ASIHTTPRequest 对象上传 UIImage 对象吗 我需要将其转换为 NSData 对象吗 这是头像上传网址 E g UIImage toUpload UIImage ima
  • iphone - UISearchBar 上的搜索按钮

    我有一个使用 UISearchBar 的搜索功能 它是即时发生的 所以我认为用 完成 替换键盘上的 搜索 按钮会更明显 有没有办法做到这一点 thanks 您可以更改keyboardTypeUISearchBar 对象的属性 然而 没有办法
  • NSString 的 UTF8String 的 CFString 等价物是什么?

    今天我陷入了僵化状态 因为我无法将一段简单的 ObjC 代码转换为其等效的 Cpp 代码 我有这个 const UInt8 myBuffer NSString aRequest UTF8String 我正在尝试用以下内容替换它 const
  • 如何将本机 C 类型与 PerformSelectorOnMainThread: 一起使用?

    我想打电话 void setDoubleValue double value using performSelectorOnMainThread 我认为可行的是 NSNumber progress NSNumber numberWithDo
  • 如何在没有 CLLocationManager 的情况下将 MKMapView 缩放到用户当前位置?

    随着MKMapView有一个名为 显示用户当前位置 的选项 它将自动显示用户的位置map 当找到该位置 以及如果它发生变化 时 我想移动并缩放到该位置 问题是 当用户位置更新时 似乎没有调用任何方法map 所以我无处可放的代码zoom sc
  • MKAnnotationView 的不同字体

    在iPhone SDK地图上的标注气泡上 可以更改标题和副标题属性的字体吗 我对标注气泡中显示的默认字体不满意 并且希望使用不同的字体来匹配我的应用程序的其余部分 然而 我没有看到太多提及这一点 这让我担心这可能是不可能的 我见过构建自定义

随机推荐

  • $http 问题 - 在 md-autocomplete Angular Material 中解决承诺之前无法返回值

    我正在使用角度材质md autocomplete在我的项目中 我通过 ajax 调用从服务主机获取建议列表 http服务 Issue http 问题 在承诺之前无法返回值 解决于md autocomplete角材料 我的要求 我需要使用远程
  • WPF 中的高性能绘图控制

    我正在做一些工作 我需要开发一个控件 它应该是一个简单的图表 显示几个点和两条边 我的问题是我需要显示最多 16k 点 更新率为 30 Hz 有没有人做过类似的事情 有什么建议吗 例如 是否从 FrameworkElement 或 Cont
  • Swift:泛型重载,“更专业”的定义

    在下面的例子中 为什么foo f 叫暧昧 我知道第二个重载也可以适用P 但为什么第一个不被认为更专业 因此是更好的匹配 func foo
  • 为什么原来的任务在继续其他任务时被取消了?

    自从我投入 C 编程以来已经 4 周了 确实很有趣 但是 我感到很痛苦 当我开始任务时HttpClient PostAsync 单独使用 效果很好 但如果我继续做其他事情 原来的任务将被取消 而不是由我取消 看起来该任务对继续进行并不满意
  • PHP - 间接修改重载属性

    我知道这个问题已经被问过好几次了 但他们都没有提供解决方法的真正答案 也许有一个适合我的具体情况 我正在构建一个使用魔术方法的映射器类 get 延迟加载其他对象 它看起来像这样 public function get index if is
  • 使用数组过滤对象数组,无需嵌套循环js

    我一直在试图找出在不使用嵌套循环的情况下过滤对象数组的最干净的方法 我找到了这个post using filter关于使用另一个数组过滤数组的函数 但我无法弄清楚如何使用相同的模式实际访问对象数组中的对象内的正确键 给定以下对象数组 tec
  • Kendo UI 重新加载树视图

    我通过 ajax 使用 kendo ui 加载一个复杂的树视图 因为我需要通过一个请求加载树 工作正常 document ready function buildTree function buildTree getJSON admin g
  • 使用 jQuery 延迟更改 insideHTML 文本

    所以我有一个非常简单的按钮 基本上可以打开和关闭表单 我们将在我们的网站上使用它 因为我们正在进行更新并希望在任何页面上提供反馈 这是我迄今为止拥有的 jQuery
  • 具有不同时间戳的重复条目

    我有一个按姓名列出的客户表 Customer SCD在 SQL 中 我其中有 3 列 Customer Name Customer ID Customer TimeStamp 该表中存在不同的重复条目时间戳 例如 ABC 1 2012 12
  • 如何在 ggplot2 中绘制(复杂的)堆叠条形图,无需复杂的手动数据聚合

    我想绘制一个 多面的 堆叠条形图 其中 X 轴以百分比表示 频率标签也显示在条中 经过相当多的工作并查看了 stackoverflow 上的许多不同问题后 我找到了如何使用 ggplot2 解决此问题的解决方案 但是 我不直接使用 ggpl
  • 多维数组转 CSV

    我得到这个数组 array cat gt array 0 gt array name gt Sales url gt http videos volkswagen nl videos videos subs gt array 0 gt ar
  • jQuery toggle() 方法的最佳替代方法?

    jQuery 不推荐使用toggle 方法 这是一种很容易切换类的方法 在搜索 stackoverflow 时 我发现了各种其他方法来完成相同的任务 支持 eventData 的 jQuery toggle 方法的替代方法 哪个 jQuer
  • 为什么在 char 变量中存储 255 在 C 中其值为 -1?

    我正在看一本C书 作者提到了一段文字 if ch a char variable is a signed type then storing 255 in the ch variable gives it the value 1 谁能详细说
  • UTC 时间重置为 2000-01-01 (ruby)。如何防止时间重置?

    我正在使用任务和电子表格 gem 将 Excel 电子表格读入我的数据库 我正在阅读的专栏之一是 start time 为此 我将形成一个值数组 然后逐一传入每个数组值 cnum array for start times sheet1 e
  • ASP.Net MVC 更新下拉选择上的 ViewModel 已更改

    起初我对网络开发完全是新手 我正在尝试开发一个由单个页面组成的 Web 应用程序 我从一个空项目开始尝试遵循 mvc 模式 为了填充我的视图 我通过我的 HomeController 将 ViewModel 传递到我的 Home 视图 现在
  • 如何使用 Plotly 制作带有滑块的分区统计图?

    我正在重新创建等值线示例并尝试添加一个滑块 拖动该滑块时 该滑块会逐年变化 另一位用户问了一个类似的问题但他们没有收到回复 我做了更多搜索并找到了一个example用户生成了额外年份的随机值并创建了一个滑块 但它是用 JavaScript
  • maven-ear-plugin 和 JBoss AS 7

    我正在迁移到 JBoss AS 7 并使用 maven 构建 在我看来 maven ear plugin 还不支持 JBoss AS 7 默认情况下它使用 JBoss AS 4 这会引起问题吗 我还在尝试弄清楚如何构建我的档案 现在遇到了与
  • 在没有互联网连接的情况下创建 Laravel 应用程序

    laravel 5 1 在没有互联网连接的情况下可以工作吗 我喜欢创建一个 Laravel 新应用程序 当我执行 laravel new test 使用 intenet 连接 时 它运行良好 但是当我在没有互联网连接的情况下在同一目录 新的
  • MongoDB CursorNotFound 在 collection.find() 上出现数百个小记录错误

    我正在 Mongo 3 6 6 上运行 在小型 Mongo Atlas 集群上 未分片 使用本机 Node JS 驱动程序 v 3 0 10 我的代码如下所示 const records await collection find user
  • 我应该在 OpenGL ES 游戏中使用多线程吗?

    我正在开发一款 iPhone 游戏 其中包含一个玩家和许多敌人 我使用 OpenGL ES 来显示游戏视觉效果 我有点困惑是否应该只使用一个线程还是使用多个线程来移动和控制玩家和敌人 您对这个基本游戏架构有什么建议 我在这一点上不同意 Ma