2012-07-03 13 views
5

के साथ डेटाबेस (जैसे sqlite) का उपयोग करें, मैं आईफोन पर गेमिंग एप्लिकेशन बनाना शुरू कर रहा हूं। मैं cocos2d-x गेम इंजन का उपयोग कर रहा हूं, क्योंकि वहां से एंड्रॉइड को पोर्ट करना आसान है। कोडिंग सी ++ में भी है, जिसे मैं बहुत परिचित हूं। मैं जानना चाहता हूं कि cocos2d-x के साथ किसी भी डेटाबेस का उपयोग करने का कोई तरीका है या नहीं। हालांकि स्क्लाइट को प्राथमिकता दी जाती है लेकिन अनिवार्य नहीं है। मेरे पास डेटाबेस में लगभग 1/2 एमबी डेटा होगा। तो, हाँ, मैंने इन-मेमोरी डेटाबेस को रखने/उपयोग करने के बारे में भी सोचा है, लेकिन मैं चाहता हूं कि मेरे पढ़ने/लिखने के प्रश्न समय कुशल हों।cocos2d-x

मैंने कुछ ब्लॉगों पर देखा है, जो सुझाव देते हैं कि मुझे स्क्लाइट के लिए सी ++ रैपर का उपयोग करने की आवश्यकता हो सकती है। समस्या एक स्वतंत्र सी ++ कोड के लिए है, मैं पर्यावरण स्थापित कर सकता हूं, लेकिन मैं cocos2d-x के साथ sqlite का उपयोग करने के लिए xcode (मैक ओएस में) में इसे कैसे एकीकृत कर सकता हूं।

उत्तर

2

मूल पोस्ट http://www.cocos2d-x.org/boards/6/topics/7006

पर मैंने पाया कि एक आसान तरीका है खेल cocos2dx को SQLite शामिल करने के लिए है।

वह है, sqlite3 C++ api से स्रोत कोड डाउनलोड करें, और Android.mk पर sqlite3.c जोड़ें।

फिर इन कोड को अपने कोकोस 2 डीएक्स कोड के रूप में संकलित करें।

और जब आप इसका उपयोग करने की आवश्यकता हो तो अपने कोड में 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

कह सकते हैं कि "स्क्लाइट सी ++ एपीआई" है लेकिन मुझे स्क्लाइट साइट पर कुछ भी मिला जो उस परिलक्षित होता है और डाउनलोड फ़ाइल जो मुझे मिलती है वह सी है (इसलिए .c) C++ नहीं है। क्या मुझे कुछ याद आ रहा है या वे एक ही –

+1

@owengerig में मेरी समस्या है। यह वास्तव में सी है, आप सी ++ कोड में किसी भी समस्या के बिना इसका उपयोग कर सकते हैं। –

1

मुझे लगता है कि सबसे अच्छा तरीका है:

  • CCFileUtils::getFileData() के साथ ओपन फ़ाइल आप अपनी फ़ाइल डेटा मिलेगा

    आपरेशन के लिए निम्नलिखित डेटाबेस पर मेरे नमूना कोड है। उदाहरण के लिए आपकी एसक्लाइट फ़ाइल :)

  • निर्देशिका लिखने के लिए CCFileUtils::getWriteablePath() का उपयोग करें जहां आप लिख सकते हैं।

  • fstream

  • साथ उदाहरण के लिए पिछले निर्देशिका में अपना डेटा लिखें अब आप sqlite3 c++ एपीआई से स्रोत कोड के साथ अपने डेटाबेस के लिए उपयोग कर सकते हैं।

पूरे topis यहाँ है: 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 खेल में SQLite के एकीकरण के बारे में एक ब्लॉग लिखा है। आप यह http://sqlite-integration-in-cocos2d-x.blogspot.in/

+0

SQLite पहले से ही एंड्रॉइड और आईओएस में एकीकृत है, आपको बस इसे अपने प्रोजेक्ट में संदर्भित करने की आवश्यकता है। –

+1

@ChaleCS चीजें cocos2d-x bro में थोड़ा अलग हैं। यदि आप देशी आईओएस (ओबीजे सी) और एंड्रॉइड (जावा) कोड में जाने के बिना स्क्लाइट एकीकरण प्राप्त करने के लिए केवल सी ++ और कोकोस 2 डी-एक्स फ्रेमवर्क का उपयोग करना चाहते हैं, तो यह ब्लॉग मदद करेगा। –