2013-03-02 35 views
5

Tôi có một dự án Xcode đang hoạt động bao gồm Cocos2d trong một trong các giao diện. Bây giờ tôi cần thêm Box2d. Tôi đã cố gắng kéo thư mục Box2D vào thư mục libs của thư mục cocos2d-2.x-ARC-iOS của tôi và thêm vào mục tiêu đó, nhưng tôi nhận được điều này khi tôi biên dịch:Cách thêm Box2d vào Dự án Xcode/Cocos2d hiện có

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

Tôi chắc chắn đây chỉ là lần đầu tiên của nhiều lỗi tôi sẽ nhận được. Tôi đang thiếu những bước nào để có được tất cả các tệp Box2d được biên soạn trong dự án của tôi?

Tất cả các tệp box2d được liệt kê trong Nguồn biên dịch cho mục tiêu thư viện cocos2d.

Và tại sao điều này lại khó thực hiện? Tại sao nó không hoạt động giống như bất kỳ thư viện nào khác?

VÀ - tôi có phải đổi tên từng đơn .m trong dự án của mình thành .mm? Đó là khá nhiều không thể vì đây là một dự án xcode lớn với nhiều tập tin. Tôi chỉ đang cố gắng sử dụng Box2d trong một chế độ xem.


thông tin bổ sung để đáp ứng với câu trả lời được đưa ra bởi LearnCocos2D-

cấu trúc thư mục của tôi (trong Finder) trông như thế này:

gốc = MyProject.xcodeproj, thư mục MyProject, cocos2d-2. Thư mục x-ARC-iOS Trong thư mục cocos2d-2.x-ARC-iOS có một thư mục có tên là libs. Bên trong thư mục mà tôi có thư mục Box2D, cùng với Cocos2d, CocosDenshion vv

Trong XCode Tôi có một DỰ ÁN (MyProject) Và 2 CÁC CHỈ TIÊU (cocos2d-thư viện, MyProject) Có "Header Search Paths" cho cả DỰ ÁN và MỤC TIÊU. Tôi đặt cái nào? Và nó nên được đệ quy hay không? Và khi tôi kéo thư mục Box2D vào Xcode, mục tiêu nào tôi đặt nó vào?

Tệp dự án của tôi được đặt tại/Users/me/Dropbox/iOS/MyProject. Vì vậy, chính xác những gì tôi nhập cho Đường dẫn tìm kiếm tiêu đề? /Users/me/Dropbox/iOS/MyProject/cocos2d-2.x-ARC-iOS/libs dường như không hoạt động.


Một Update - /Users/me/Dropbox/iOS/MyProject/cocos2d-2.x-ARC-iOS/libs như con đường Tiêu đề Tìm trong MyProject MỤC TIÊU dường như để làm cho tôi quá khứ lỗi Box2D. Sau đó, tôi đã có một tập tin 'cassert' không tìm thấy lỗi. Đã vượt qua điều đó bằng cách thay đổi bộ điều khiển xem, đó là phụ huynh và AppDelegate thành Loại tệp "Nguồn mục tiêu-C++" như bạn đã đề xuất. Và bây giờ ...

Bây giờ tôi đã có nhiều lỗi trong NSObjCRuntime.h NSZone.h, NSObject (Tên không đủ tiêu chuẩn dự kiến, Tên loại không xác định 'NSString', v.v.). Vì vậy, có vẻ như bạn hoặc là tạo ra một ứng dụng với Box2d/Cocos2d, hoặc một ứng dụng UIKit. Cố gắng để có cả hai là một cơn ác mộng hoàn chỉnh.

Trả lời

7

Giải pháp dễ nhất: bắt đầu một dự án mới với Box2D đã được tích hợp. Sau đó, thêm các tệp nguồn của bạn & tài nguyên vào đó. Tin tôi đi, nó sẽ không dễ dàng hơn.

Một vài điều từ đỉnh đầu của tôi được yêu cầu cho Box2D:

Như con đường tìm kiếm sử dụng đường dẫn đến tập tin Box2D.h trừ một cấp. Ok, điều này cần giải thích tốt hơn:

Nếu Box2D.h là trong /Projects/MyProject/libs/Box2D

... sau đó tìm kiếm con đường nên /Projects/MyProject/libs

Điều này là do Box2D báo cáo #include luôn bao gồm đường dẫn Box2D:

#include <Box2D/Common/b2Settings.h> 

Nói tóm lại, Header tìm kiếm Path cộng với #include/# đường dẫn nhập phải cung cấp đường dẫn đầy đủ đến tệp:

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

Sau đó, thật dễ dàng để kiểm tra xem bạn có đường dẫn tìm kiếm hay không hay không.

Đảm bảo thêm đường dẫn tìm kiếm vào Đường dẫn tìm kiếm tiêu đề chứ không phải cài đặt Đường dẫn tìm kiếm tiêu đề người dùng như đối với các thư viện khác. Điều này là do Box2D sử dụng khung góc <file.h> bao gồm. Hầu hết các thư viện khác sử dụng "file.h" thay vào đó, sử dụng Đường dẫn tìm kiếm tiêu đề người dùng để tìm tệp tiêu đề của chúng.

Tại sao khó khăn? Cài đặt trình biên dịch. Có rất nhiều người trong số họ. Lỗi và cảnh báo không phải lúc nào cũng rõ ràng. Trên thực tế, đây là tiêu chuẩn. Và rất nhiều cách để viết và thêm mã. Rất nhiều phiên bản ngôn ngữ và ngôn ngữ khác nhau. Đó chủ yếu là vấn đề về trải nghiệm. Ở cấp độ 5 và cao hơn nó trở nên dễ dàng hơn, ở cấp 10 nó chỉ là một mối phiền toái. :)

Bạn phải đổi tên mọi tệp .m bao gồm Box2D trực tiếp (#import "Box2D.h") hoặc gián tiếp (bao gồm tiêu đề bao gồm Box2D). Nếu bạn thêm tiêu đề Box2D vào tệp Prefix.pch, điều đó sẽ giống như bao gồm nó trong mỗi tệp - vì vậy tôi sẽ không làm điều đó trong tình huống của bạn.

Bạn có thể tránh đổi tên bằng cách đặt loại tệp của tệp .m trong Xcode thành "Objective-C++". Mặc dù điều này sẽ chỉ là tẻ nhạt, nếu không nhiều hơn. Mẹo: có những công cụ tốt ngoài đó cho các tệp đổi tên hàng loạt, cho các tình huống chính xác như thế này.

+0

Cảm ơn bạn rất nhiều vì đã giúp đỡ. Tôi sẽ giải thích nỗ lực hiện tại của tôi ở đây trong một chỉnh sửa cho câu hỏi ban đầu của tôi, bởi vì tôi vẫn nhận được cùng một lỗi. – soleil

+0

Tôi đã thực hiện các chỉnh sửa ở trên. Bạn cũng có thể xây dựng cách kiểm tra xem tôi có đúng đường dẫn tìm kiếm không? Tôi không hiểu phần đó của câu trả lời của bạn. Cảm ơn! – soleil

+0

Trừ một cấp vì Box2D đã bao gồm thư mục Box2D trong đường dẫn tìm kiếm là những gì làm cho nó cuối cùng làm việc cho tôi! Và đừng quên đặt con đường serach giữa "" như nếu Box2D là trong thư mục dự án của bạn "$ (SRCROOT)" sẽ làm các trick –

2

Thêm phần này vào các đường dẫn tìm kiếm tiêu đề và xem các công việc kỳ diệu: $ [PROJECT_DIR]

0

Bạn có thể có lỗi biên dịch sau:

  1. “Header tập tin không tìm thấy”: Giải pháp là sửa đổi Đường dẫn Tìm kiếm Tiêu đề Người dùng để bao gồm thư mục của Box2D. Nếu bạn đặt Box2D bên dưới thư mục của dự án, bạn có thể sử dụng biến môi trường sau $ {PROJECT_DIR}. Nhớ kiểm tra “đệ quy”. LƯU Ý: Hủy bỏ tất cả các liên kết đến Box2D từ đường dẫn tiêu đề. Ví dụ: TestGame/Libraries/Box2D -> $ {PROJECT_DIR}/TestGame/Libraries

  2. Không thể tìm thấy tệp tiêu đề Cpp như <cassert> ...: đổi tên tệp thành tiện ích mở rộng * .mm thay vì * .m giải quyết vấn đề.