我有一个使用 Box2D 的 iOS 游戏。当我在调试模式下运行它时,一切都很好。当我在发布模式下运行它时,所有游戏对象都会加速,看起来游戏对象的质量更高或类似的东西。这很奇怪。
两个版本的帧速率几乎相同,所以这不是问题。无论如何,游戏中的所有内容都应该与帧速率无关。
知道 XCode 中的什么项目设置可能会导致这种情况吗?
当你在调试中运行时,编译器没有做任何优化,所以二进制文件要大得多,而且代码经常做无用的工作。在 Release 中,优化器(默认为 -Os)运行,它积极地寻找缩小代码。这是开发人员在测试他们的代码时通常应该使用 Release 而不是 Debug 的原因之一,并且只有在他们真正需要 lldb 时才切换到 Debug。
编辑:所以这里有几件事可能会产生差异。首先,Box2D 是包含项目还是链接库?如果是第一个,请确保它同时具有 Debug 和 Release 配置。查看您和 Box2D 的构建设置,并查看是否在一个配置或另一个配置中定义了任何内容(即您可能会找到 -DSLOW)或某些将设置(或不设置标志)的定义语句。啊,调试我通常会定义 DEBUG=1 (在预处理器部分),Box2D(甚至你的代码)可能会出于某种目的而使用。
如果您找不到另一个不同的构建设置,那么您可以通过将 Debug 配置中使用的值从 -O0 实际更改为 -O1、-O2 和 =Os 来查看优化器是否有影响。同样,您可以将 Release 设置从 -Os 更改为 -O0。
我猜想要么是 Debug 配置中的“DEBUG”设置、Release 中的一些其他定义,要么是优化器是原因,通过使用 Debug 和 Release,您可以找出问题所在。事实上,您甚至可以(临时)将 DEBUG=1 添加到发布配置中。