2013-03-02 69 views
5

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

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

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

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

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

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


响应由LearnCocos2D-

我的文件夹结构(在Finder中)给出了答案附加信息是这样的:

根= MyProject.xcodeproj,MyProject的文件夹,的cocos2d-2。 x-ARC-iOS文件夹 在cocos2d-2.x-ARC-iOS文件夹中有一个名为libs的文件夹。该文件夹我有Box2D的文件夹,用cocos2d的,CocosDenshion一起,等里面

在Xcode我有一个项目(MyProject的) 和2个目标(cocos2d的库,My​​Project的) 有“头搜索路径”为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的目标标题搜索路径似乎得到了我过去的Box2D的错误。然后我有一个'cassert'文件找不到错误。通过改变视图控制器,它是父视图,并将AppDelegate改为文件类型“Objective-C++ Source”,就像你所建议的那样。而现在...

现在我已经在NSObjCRuntime.h NSZone.h,NSObject(预期的非限定id,未知的类型名称'NSString',等等)中出现了一连串的错误。所以看起来你要么使用Box2d/Cocos2d创建应用程序,要么创建一个UIKit应用程序。试图让两者都是一个完整的噩梦。

回答

7

最简单的解决方案:使用已集成的Box2D启动一个新项目。然后将您的源文件&资源添加到它。相信我,这并不容易。

从所需要的Box2D的我的头顶部有两件事情:

随着搜索路径使用路径Box2D.h文件负一平。好的,这需要更好的解释:

如果Box2D。h为/Projects/MyProject/libs/Box2D

...然后搜索路径应该是/Projects/MyProject/libs

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

#include <Box2D/Common/b2Settings.h> 

综上所述,标题搜索路径加的#include /#导入路径应该给出文件的完整路径:

/Projects/MyProject/libs/Box2D/Common/b2Settings.h 

然后很容易检查你是否得到了搜索路径r或不是。

一定要将搜索路径添加到标题搜索路径而不是用户标题搜索路径设置与其他库一样。这是因为Box2D使用了包括<file.h>的角度支架。大多数其他库使用"file.h"来代替,它们使用用户头搜索路径来查找它们的头文件。

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

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

您可以通过将Xcode中.m文件的文件类型设置为“Objective-C++”来避免重命名。尽管如此,这将是单调乏味的。提示:对于批量重命名文件,有很好的工具,适用于这种情况。

+0

非常感谢您的帮助。我将在编辑原始问题时解释我目前的尝试,因为我仍然遇到同样的错误。 – soleil 2013-03-03 03:49:36

+0

我已经做了上面的编辑。你能否详细说明如何检查我的搜索路径是否正确?我不明白你的回应的一部分。谢谢! – soleil 2013-03-03 04:03:31

+0

因为Box2D已经在搜索路径中包含了Box2D文件夹,所以减少了一级是什么让它终于为我工作!并且不要忘记把“”(如果Box2D在你的项目文件夹“$(SRCROOT)”)之间的“”之间的serach路径将做的窍门 – 2013-08-04 08:25:27

2

添加这头搜索路径,看看神奇的工作: $ [PROJECT_DIR]

0

您可能有以下编译错误:

  1. “头文件未找到”:解决方案是修改用户头部搜索路径以包含Box2D的目录。如果将Box2D放置在项目目录下,则可以使用以下环境变量$ {PROJECT_DIR}。记得检查“递归”。注意:从标题路径中删除所有到Box2D的链接。例如:TestGame /库/ Box2D的 - > $ {} PROJECT_DIR/TestGame /库

  2. .cpp的头文件中没有发现如<cassert> ...:你的文件重命名为扩展名为* .mm而不是* .M会解决这个问题。

相关问题