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

如何将Box2d添加到现有的Xcode/Cocos2d项目,xcode,cocos2d-iphone,box2d,box2d-iphone,Xcode,Cocos2d Iphone,Box2d,Box2d Iphone,我有一个正在工作的Xcode项目,其中一个视图中包含Cocos2d。我现在需要添加Box2d。我尝试将Box2D文件夹拖到我的cocos2d-2.x-ARC-iOS文件夹的libs目录中,并添加到该目标中,但我在编译时发现: (in b2BroadPhase.cpp) 'Box2D/Collision/b2BroadPhase.h' file not found 我相信这只是我将遇到的许多错误中的第一个。在我的项目中编译所有的Box2d文件时,我遗漏了什么步骤 所有box2d文件都列在coco

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

(in b2BroadPhase.cpp)
'Box2D/Collision/b2BroadPhase.h' file not found
我相信这只是我将遇到的许多错误中的第一个。在我的项目中编译所有的Box2d文件时,我遗漏了什么步骤

所有box2d文件都列在cocos2d库目标的编译源代码中

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

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


回应LearnCos2D给出答案的其他信息-

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

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

在XCode中,我有一个项目(MyProject) 和2个目标(cocos2d库,MyProject) 项目和目标都有“标题搜索路径”。我应该设置哪一个?它应该是递归的还是非递归的?当我将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++源”文件类型,克服了这一问题。现在


现在,我在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>
这样就很容易检查搜索路径是否正确

确保将搜索路径添加到标题搜索路径,而不是像其他库那样添加用户标题搜索路径设置。这是因为Box2D使用角括号
包含。大多数其他库使用
“file.h”
,它们使用用户头搜索路径来查找头文件

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

您必须直接(
#导入“Box2D.h”
)或间接(包括包含Box2D的头)重命名包含Box2D的每个.m文件。如果将Box2D头添加到Prefix.pch文件中,这与将其包含在每个文件中是一样的,因此在您的情况下我不会这样做


通过将Xcode中.m文件的文件类型设置为“Objective-C++”,可以避免重命名。虽然这将是一样乏味,如果不是更多。提示:对于这种情况,有一些很好的工具可以批量重命名文件。

将其添加到标题搜索路径中,并查看神奇的工作:
$[PROJECT\u DIR]

您可能有以下编译错误:

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

  • 找不到Cpp头文件,例如
    ..:将文件的扩展名改为*.mm而不是*.m将解决此问题


  • 非常感谢你的帮助。我将在对我的原始问题的编辑中解释我目前的尝试,因为我仍然得到相同的错误。我已经做了上面的编辑。你能详细说明一下如何检查我的搜索路径是否正确吗?我不明白你回答的那部分。谢谢减去一级,因为Box2D已经在搜索路径中包含了Box2D文件夹,所以它最终对我有效!别忘了把serach路径放在“”之间,就像Box2D在您的项目文件夹“$(SRCROOT)”中一样,这样做很麻烦。必须有一种更简单的方法来添加现有库。
    /Projects/MyProject/libs/Box2D/Common/b2Settings.h