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

sol*_*eil 5 xcode box2d cocos2d-iphone box2d-iphone

我有一个工作的Xcode项目,其中一个视图中包含Cocos2d.我现在需要添加Box2d.我试图拖动文件夹的Box2D到我的cocos2d-2.X-ARC-的iOS文件夹的目录库和添加到目标,但我得到这个当我编译:

(in b2BroadPhase.cpp)
'Box2D/Collision/b2BroadPhase.h' file not found
Run Code Online (Sandbox Code Playgroud)

我敢肯定,这只是我将遇到的许多错误中的第一个.我错过了什么步骤才能获得我项目中编译的所有Box2d文件?

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

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

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


针对LearnCocos2D给出的答案的其他信息 -

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

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

在XCode中,我有一个PROJECT(MyProject)和2个TARGETS(cocos2d-library,MyProject)PROJECT和TARGETS都有"Header Search Paths".我设置哪一个?它应该是递归的还是非递归的?当我将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'文件找不到错误.通过将视图控制器,它的父级和AppDelegate更改为文件类型"Objective-C++ Source",就像你建议的那样.现在...

现在我已经得到了在NSObjCRuntime.h NSZone.h,NSObject的错误一连串的(预期不合格-ID,未知类型名"的NSString"等).因此,您似乎要么使用Box2d/Cocos2d或UIKit应用程序创建应用程序.试图让两者都是一场彻头彻尾的噩梦.

Lea*_*s2D 8

最简单的解决方案:启动已集成Box2D的新项目.然后将源文件和资源添加到它.相信我,它并不容易.

Box2D需要我的头顶几件事:

由于搜索路径使用Box2D.h文件的路径减去一个级别.好的,这需要一个更好的解释:

如果Box2D.h在 /Projects/MyProject/libs/Box2D

...那么搜索路径应该是 /Projects/MyProject/libs

这是因为Box2D #include语句总是包含Box2D路径:

#include <Box2D/Common/b2Settings.h>
Run Code Online (Sandbox Code Playgroud)

总之,标头搜索路径加上#include/#import路径应该提供文件的完整路径:

/Projects/MyProject/libs/Box2D/Common/b2Settings.h
Run Code Online (Sandbox Code Playgroud)

然后很容易检查您是否正确搜索路径.

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

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

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

您可以通过将Xcode中的.m文件的文件类型设置为"Objective-C++"来避免重命名.虽然这将是同样乏味的,如果不是更多.提示:对于大规模重命名文件,有很好的工具,对于这样的情况.