2012-07-03 96 views
5

我開始在iphone上構建遊戲應用程序。我使用cocos2d-x遊戲引擎,因爲它很容易從那裏移植到android。此外,編碼是在C++中,我非常熟悉。我想知道是否有方法使用任何數據庫與cocos2d-x。雖然sqlite是首選,但不是強制性的。我將在數據庫中擁有大約1/2 mb的數據。所以,是的,我也考慮過保留/使用內存數據庫,但我希望我的讀/寫查詢時間效率高。使用數據庫(如sqlite)與cocos2d-x

我看了一些博客,這表明我可能需要使用C++包裝的sqlite。問題是,對於一個獨立的C++代碼,我可以設置環境,但是如何將它集成到xcode(在mac os中)以使用帶有cocos2d-x的sqlite。

回答

2

原帖是在http://www.cocos2d-x.org/boards/6/topics/7006

我發現,最簡單的方法,包括對sqlite的遊戲cocos2dx。

也就是說,從sqlite3 C++ api下載源代碼,並將sqlite3.c添加到Android.mk。

然後將這些代碼編譯爲您的cocos2dx代碼。

當你需要使用它時,在你的代碼中包含sqlite.h。

對於操作數據庫下面是我的示例代碼:

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

你說「sqlite的C++ API」但我沒有找到關於SQLite的網站,反映和下載文件,我得到它們形成爲C(因此.C)沒有C++什麼。我是否錯過了一些東西,或者他們是否在同一個 –

+1

@owengerig這是我的問題。它實際上是c,你可以在C++代碼中沒有任何問題的情況下使用它。 –

1

我認爲最好的方法是:

整個託皮斯是在這裏:http://www.cocos2d-x.org/boards/6/topics/7006

示例代碼:)

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

我已經寫了關於源碼的整合在Xcode步步是Cocos2d-X遊戲博客。你可以看到這個 http://sqlite-integration-in-cocos2d-x.blogspot.in/

+0

SQLite已經集成在Android和IOS中,您只需將它引用到您的項目中即可。 –

+1

@ChaleCS cocos2d-x bro中的東西有點不同。如果您只想使用C++和cocos2d-x框架來實現sqlite集成,而無需進入本機ios(obj c)和android(java)代碼,那麼這個博客將有所幫助。 –