2013-03-02 68 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會解決這個問題。

相關問題