我有一个正在运行的Xcode项目,其中包含一个视图中的Cocos2d。我现在需要添加Box2d。我尝试将Box2D文件夹拖到我的cocos2d-2.x-ARC-iOS文件夹的libs目录中并添加到该目标,但是我在编译时得到了这个:
(in b2BroadPhase.cpp)
'Box2D/Collision/b2BroadPhase.h' file not found
我确信这只是我将遇到的许多错误中的第一个。我错过了什么步骤来获取我的项目中编译的所有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都有“标题搜索路径”。我设置哪一个?它应该是递归的还是非递归的?当我将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应用程序创建应用程序。试图让两者都是一场彻头彻尾的噩梦。
答案 0 :(得分:8)
最简单的解决方案:启动已集成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的标头)重命名包含Box2D的每个.m文件。如果你将Box2D标题添加到Prefix.pch文件中,那就像将它包含在每个文件中一样 - 所以我不会在你的情况下这样做。
您可以通过将Xcode中的.m文件的文件类型设置为“Objective-C ++”来避免重命名。虽然这将是同样乏味的,如果不是更多。提示:对于大规模重命名文件,有很好的工具可用于这种情况。
答案 1 :(得分:2)
将此添加到标题搜索路径并查看神奇的工作: $ [PROJECT_DIR]
答案 2 :(得分:0)
您可能遇到以下编译错误:
“找不到头文件”:解决方法是修改用户头搜索路径以包含Box2D的目录。如果将Box2D放在项目目录下,则可以使用以下环境变量$ {PROJECT_DIR}。记得检查“递归”。注意:从标题路径中删除Box2D的所有链接。例如:TestGame / Libraries / Box2D - &gt; $ {PROJECT_DIR} / TestGame /库
找不到Cpp头文件,例如<cassert>
...:将文件重命名为扩展名* .mm而不是* .m将解决此问题。