2013-03-02 27 views
5

Ho un progetto Xcode funzionante che include Cocos2d in una delle viste. Ora ho bisogno di aggiungere Box2d. Ho provato a trascinare la cartella Box2D nella directory libs della mia cartella cocos2d-2.x-ARC-iOS e aggiungendo a tale obiettivo, ma sto ottenendo questo quando ho compilare:Come aggiungere Box2d a un progetto Xcode/Cocos2d esistente

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

Sono sicuro che questo è solo il primo di molti errori che otterrò. Che passo mi manca per ottenere tutti i file Box2d compilati nel mio progetto?

Tutti i file box2d sono elencati nelle origini di compilazione per la destinazione della libreria cocos2d.

E perché è così difficile da fare? Perché non funziona come qualsiasi altra libreria?

E - devo rinominare ogni singolo .m nel mio progetto in .mm? Questo è praticamente impossibile in quanto si tratta di un grande progetto xcode con molti file. Sto solo cercando di usare Box2d in una vista.


Ulteriori informazioni in risposta alla risposta data dal LearnCocos2D-

mia struttura di cartelle (nel Finder) si presenta così:

root = MyProject.xcodeproj, cartella MyProject, cocos2d-2. cartella x-ARC-iOS Nella cartella cocos2d-2.x-ARC-iOS è presente una cartella chiamata libs. All'interno di tale cartella non ho la cartella Box2D, insieme a Cocos2d, CocosDenshion, ecc

in Xcode Ho un progetto (MyProject) E 2 OBIETTIVI (cocos2d-biblioteca, MyProject) Ci sono "Header" Percorsi di ricerca per sia il PROGETTO, sia i TARGET. Quale faccio? E dovrebbe essere ricorsivo o no? E quando trascino la cartella Box2D in Xcode, su quale target la imposto?

Il file di progetto si trova in/Users/me/Dropbox/iOS/MyProject. Quindi, che cosa esattamente inserisco per il percorso di ricerca dell'intestazione? /Users/me/Dropbox/iOS/MyProject/cocos2d-2.x-ARC-iOS/libs non sembra funzionare.


Un altro aggiornamento - /Users/me/Dropbox/iOS/MyProject/cocos2d-2.x-ARC-iOS/libs come intestazione percorso di ricerca nel MyProject TARGET sembra di farmi passato gli errori Box2D. Poi ho avuto un errore 'file di cassert' non trovato. Superato questo cambiando il controller della vista, è genitore e AppDelegate a un tipo di file di "Origine Objective-C++" come suggerito. E ora ...

Ora ho una litania di errori in NSObjCRuntime.h NSZone.h, NSObject (ID atteso non qualificato, nome del tipo sconosciuto 'NSString', ecc.). Quindi sembra che tu abbia creato un'app con Box2d/Cocos2d o un'app UIKit. Cercare di avere entrambi è un incubo completo.

risposta

7

La soluzione più semplice: avviare un nuovo progetto con Box2D già integrato. Quindi aggiungere le risorse di file di origine & ad esso. Fidati di me, non diventa più facile.

Un paio di cose dalla parte superiore della mia testa che sono necessari per Box2D:

Come percorso di ricerca utilizzare il percorso per il file di Box2D.h meno di un livello. Ok, questo ha bisogno di una spiegazione migliore:

Se Box2D.h è in /Projects/MyProject/libs/Box2D

... quindi cercare il percorso dovrebbe essere /Projects/MyProject/libs

Questo perché istruzioni #include Box2D includono sempre il percorso Box2D:

#include <Box2D/Common/b2Settings.h> 

In sintesi, l'intestazione percorso di ricerca più il # include/# percorso di importazione dovrebbe fornire il percorso completo del file:

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

Quindi è facile controllare se hai ottenuto il percorso di ricerca r ight o no

Assicurarsi di aggiungere il percorso di ricerca a Percorso di ricerca intestazione e non al percorso di ricerca intestazione utente come per altre librerie. Questo perché Box2D utilizza la parentesi angolare <file.h> include. La maggior parte delle altre librerie usa invece "file.h", che usa il percorso di ricerca dell'intestazione dell'utente per trovare i loro file di intestazione.

Perché è difficile? Impostazioni del compilatore. Ce ne sono molti. Errori e avvertimenti non sono sempre ovvi. In realtà, questa è la norma. E molti modi per scrivere e aggiungere codice. Oh, tante lingue e versioni linguistiche diverse. È principalmente una questione di esperienza. Al livello 5 e superiore diventa più facile, al livello 10 è semplicemente una seccatura. :)

È necessario rinominare ogni file .m che include Box2D direttamente (#import "Box2D.h") o indirettamente (inclusa un'intestazione che include Box2D). Se si aggiunge l'intestazione di Box2D al file Prefix.pch, ciò equivale a includerlo in ogni file, quindi non lo farei nella situazione.

È possibile evitare la ridenominazione impostando il tipo di file dei file .m in Xcode su "Objective-C++". Anche se questo sarà altrettanto noioso, se non di più. Suggerimento: esistono ottimi strumenti per i file di ridenominazione di massa, per situazioni esattamente come questa.

+0

Grazie mille per aver cercato di aiutare. Ho intenzione di spiegare il mio attuale tentativo in questa modifica alla mia domanda originale, perché sto ancora ricevendo lo stesso errore. – soleil

+0

Ho apportato le modifiche sopra. Puoi anche approfondire come controllare se ho trovato il percorso di ricerca giusto? Non ho capito quella parte della tua risposta. Grazie! – soleil

+0

Meno un livello perché Box2D include già la cartella Box2D nel percorso di ricerca è ciò che ha reso finalmente funzionante per me! E non dimenticare di mettere il percorso di ricerca tra "" come se Box2D si trova nella cartella del progetto "$ (SRCROOT)" farà il trucco –

2

Aggiungere questo ai percorsi di ricerca di intestazione e vedere il lavoro magia: $ [project_dir]

0

si possono avere i seguenti errori di compilazione:

  1. “Intestazione non file trovati”: soluzione è modificare il percorso di ricerca dell'intestazione dell'utente per includere la directory di Box2D. Se metti Box2D sotto la directory del tuo progetto, puoi usare la seguente variabile d'ambiente $ {PROJECT_DIR}. Ricorda di controllare "ricorsivo". NOTA: Rimuovi tutto il collegamento a Box2D dal percorso dell'intestazione. Ad esempio: TestGame/Biblioteche/Box2D -> $ {}/project_dir TestGame/Libraries

  2. intestazione
  3. Cpp non file trovati quali <cassert> ...: rinominare il file per l'estensione * .mm invece di * .m sarà risolvi questo problema.

Problemi correlati