xcode - 如何将 Box2d 添加到现有的 Xcode/Cocos2d 项目

标签 xcode cocos2d-iphone box2d box2d-iphone

我有一个工作 Xcode 项目,其中一个 View 包含 Cocos2d。我现在需要添加 Box2d。我尝试将 Box2D 文件夹拖到我的 cocos2d-2.x-ARC-iOS 文件夹的 libs 目录中并添加到该目标,但我在编译时得到了这个:

(in b2BroadPhase.cpp)
'Box2D/Collision/b2BroadPhase.h' file not found

我确信这只是我将得到的许多错误中的第一个。我错过了什么步骤来编译我的项目中的所有 Box2d 文件?

所有 box2d 文件都列在 cocos2d-library 目标的编译源中。

为什么这很难做到?为什么它不像其他图书馆那样工作?

并且 - 我是否必须将项目中的每个 .m 重命名为 .mm?这几乎是不可能的,因为这是一个包含许多文件的大型 xcode 项目。我只是想在一个 View 中使用 Box2d。

针对 LearnCocos2D 给出的答案的附加信息-

我的文件夹结构(在 Finder 中)如下所示:

Root = MyProject.xcodeproj、MyProject文件夹、cocos2d-2.x-ARC-iOS文件夹
在 cocos2d-2.x-ARC-iOS 文件夹中有一个名为 libs 的文件夹。在该文件夹中,我有 Box2D 文件夹,以及 Cocos2d、CocosDenshion 等。

在 XCode 中,我有一个项目(MyProject)
和 2 个目标(cocos2d-library,MyProject)
PROJECT 和 TARGETS 都有“标题搜索路径”。我设置哪一个?它应该是递归的还是非递归的?当我将 Box2D 文件夹拖入 Xcode 时,我将其设置为哪个目标?

我的项目文件位于/Users/me/Dropbox/iOS/MyProject。那么我到底应该为标题搜索路径输入什么?/Users/me/Dropbox/iOS/MyProject/cocos2d-2.x-ARC-iOS/libs 似乎不起作用。

另一个更新 -/Users/me/Dropbox/iOS/MyProject/cocos2d-2.x-ARC-iOS/libs 作为 MyProject TARGET 中的标题搜索路径似乎让我克服了 Box2D 错误。然后我有一个'cassert'文件未找到错误。通过将 View Controller (它的父级)和 AppDelegate 更改为“Objective-C++ Source”的文件类型(如您所建议的),从而解决了这个问题。现在...

现在,我在 NSObjCRuntime.h NSZone.h、NSObject(预期的非限定 ID、未知类型名称“NSString”等)中出现了一连串错误。所以看起来你要么用 Box2d/Cocos2d 创建一个应用程序,要么创建一个 UIKit 应用程序。试图同时拥有两者是一场彻头彻尾的噩梦。

最佳答案

最简单的解决方案:使用已经集成的 Box2D 开始一个新项目。然后将您的源文件和资源添加到其中。相信我,它并没有变得更容易。

Box2D 需要的几件事情:

作为搜索路径,使用 Box2D.h 文件的路径 减一级 .好的,这需要更好的解释:

如果 Box2D.h 在 /Projects/MyProject/libs/Box2D
... 那么搜索路径应该是 /Projects/MyProject/libs
这是因为 Box2D #include 语句总是包含 Box2D 路径:

#include <Box2D/Common/b2Settings.h>

总之,标题搜索路径加上#include/#import 路径应该给出文件的完整路径:
/Projects/MyProject/libs/Box2D/Common/b2Settings.h

然后很容易检查您是否获得了正确的搜索路径。

请务必将搜索路径添加到 标题搜索路径 而不是其他库的用户标题搜索路径设置。这是因为 Box2D 使用尖括号 <file.h>包括。大多数其他图书馆使用 "file.h"相反,它使用用户头搜索路径来查找他们的头文件。

为什么很难?编译器设置。有很多。错误和警告并不总是显而易见的。其实,这是常态。以及多种编写和添加代码的方法。哦,还有很多不同的语言和语言版本。这主要是经验问题。在 5 级和更高级别它变得更容易,在 10 级它只是一个麻烦。 :)

您必须直接( #import "Box2D.h" )或间接(包括包含 Box2D 的 header )重命名包含 Box2D 的每个 .m 文件。如果您将 Box2D header 添加到 Prefix.pch 文件,这与将它包含在每个文件中是一样的 - 所以在您的情况下我不会这样做。

您可以通过将 Xcode 中 .m 文件的文件类型设置为“Objective-C++”来避免重命名。尽管这将同样乏味,甚至更多。提示:有一些很好的工具可用于批量重命名文件,适用于这种情况。

关于xcode - 如何将 Box2d 添加到现有的 Xcode/Cocos2d 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15179253/

相关文章:

objective-c - 如何向 NSUserDefaults 写入/获取 "long long int"

java - 我将如何创建 Horizo​​ntally centered “Gravity” ? - libGDX -

java - 将接口(interface)方法委托(delegate)给各种类

iphone - 如何订阅设备方向(非界面方向)事件?

ios - 如何在 Xcode playground 中使用自动布局约束显示 View ?

iOS:CNContactPicker didSelect - 如何确定所选属性的类型?

iphone - 如何在雪豹上安装iPhone2.0 SDK?

ios - Cocos2D 文件实现到 UIKit 应用程序中?

iphone - 管理器中的 xcode 无效存档

xcode - Cocos2D 垂直滚动背景