5

iphoneでゲームアプリを作り始めています。そこからAndroidに移植するのは簡単なので、私はcocos2d-xゲームエンジンを使用しています。また、コーディングは私がよく知っている C++ で行われます。cocos2d-xで任意のデータベースを利用する方法があれば知りたいです。sqlite が推奨されますが、必須ではありません。データベースには約 1/2 MB のデータがあります。そうです、インメモリデータベースを保持/使用することも考えましたが、読み取り/書き込みクエリを時間効率的にしたいと考えています。

いくつかのブログを調べたところ、sqlite に C++ ラッパーを使用する必要があるかもしれないことが示唆されています。問題は、独立した C++ コードの場合、環境をセットアップできますが、これを (Mac OS の) xcode に統合して cocos2d-x で sqlite を使用するにはどうすればよいかということです。

4

3 に答える 3

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);
于 2012-07-04T00:22:17.533 に答える
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);
于 2012-11-17T21:40:54.997 に答える
1

xcode の cocos2d-x ゲームでの sqlite の統合に関するブログを段階的に書いています。これを見ることができます http://sqlite-integration-in-cocos2d-x.blogspot.in/

于 2014-03-24T18:45:38.967 に答える