2012-07-03 10 views
5

Sto iniziando a creare un'applicazione di gioco su iphone. Sto usando il motore di gioco cocos2d-x, dal momento che è facile portarlo su Android da lì. Anche la codifica è in C++, che conosco molto bene. Voglio sapere se c'è un modo per usare qualsiasi database con cocos2d-x. Sebbene sqlite sia preferito ma non obbligatorio. Avrò circa 1/2 MB di dati nel database. Quindi, sì, ho pensato di mantenere/utilizzare un database in memoria, ma voglio che le mie query di lettura/scrittura siano efficienti nel tempo.Usa database (come sqlite) con cocos2d-x

Ho esaminato alcuni blog, il che suggerisce che potrebbe essere necessario utilizzare un wrapper C++ per sqlite. Il problema è che, per un codice C++ indipendente, posso configurare l'ambiente, ma come posso integrare questo in xcode (in mac os) per usare sqlite con cocos2d-x.

risposta

2

post originale è a http://www.cocos2d-x.org/boards/6/topics/7006

ho scoperto che un modo più semplice per includere SQLite per cocos2dx gioco.

Cioè, scaricare il codice sorgente da sqlite3 C++ api e aggiungere sqlite3.c in Android.mk.

Quindi compilare questi codici come codice cocos2dx.

e includere sqlite.h in yourcode quando è necessario utilizzarlo.

Per il funzionamento su base di dati che segue è il mio codice di esempio:

sqlite3 *pDB = NULL; 
char* errMsg = NULL; 
string sqlstr; 
int result; 
string dbPath = CCFileUtils::getWriteablePath(); 
dbPath.append("Settings.db"); 
result = sqlite3_open(dbPath.c_str(),&pDB); 
if (result != SQLITE_OK) 
    CCLOG("OPENING WRONG, %d, MSG:%s",result,errMsg); 

bool isExisted_; 
sqlstr = "select count(type) from sqlite_master where type='table' and name='YourTableName'"; 
result = sqlite3_exec(pDB, sqlstr.c_str(), isExisted, &isExisted_, &errMsg); 
if(result != SQLITE_OK) 
    CCLOG("check exist fail %d Msg: %s", result, errMsg); 
result = sqlite3_exec(pDB, "create table YourTableName(ID INTEGER primary key autoincrement, name varchar(32), type INT, posX INT, posY INT, isUnlock INT)",NULL,NULL,&errMsg); 
if(result != SQLITE_OK) 
    CCLOG("CREATE TABLE FAIL %d, Msg: %s",result,errMsg); 
sqlite3_close(pDB); 
+0

voi dite "Sqlite C++ api" ma ho trovato qualcosa sul sito Sqlite che lo riflettesse e il file di download che ottengo da loro è C (da cui il .c) non C++. Mi manca qualcosa o sono uno nello stesso –

+1

@owengerig è il mio problema. in realtà è c, puoi usarlo senza problemi nel codice C++. –

1

Penso che il modo migliore è:

L'intero damalischi è qui: codice http://www.cocos2d-x.org/boards/6/topics/7006

Esempio :)

CCFileUtils* fileUtils = CCFileUtils::sharedFileUtils(); 
unsigned long size = 5; 

unsigned char* smth; 
smth = fileUtils->getFileData("koalalocker","r",&size); 

printf("Size: %lu\n\n",size); 
fflush(stdout); 

if(cos == NULL) 
    { 
    LOG("can't open"); 
      return; 
    } 
else 
    LOG("I have something!"); 

string path = fileUtils->getWriteablePath(); 
path += "test_OUT"; 

char buffer[300]; 
sprintf(buffer,"PATH: %s\n",path.c_str()); 
LOG(buffer); 
std::fstream outfile(path.c_str(),std::fstream::out); 
outfile.write((const char*)smth,size-1); 
outfile.close(); 

LOGN("Size:",size); 
LOG((const char*)smth); 
1

Ho scritto un blog per quanto riguarda l'integrazione di SQLite in un gioco cocos2d-x nel passo dopo passo Xcode. Potete vedere questo

+0

SQLite è già integrato in Android e IOS, è sufficiente il riferimento nel progetto. –

+1

@ChaleCS Le cose sono leggermente diverse in cocos2d-x bro. Se si desidera utilizzare solo il framework C++ e cocos2d-x per ottenere l'integrazione sqlite senza passare al codice nativo ios (obj c) e android (java), allora questo blog aiuterà. –