我开始在iphone上构建游戏应用程序。我正在使用cocos2d-x游戏引擎,因为它很容易从那里移植到android。编码也是用C ++编写的,我非常熟悉。我想知道是否有办法使用cocos2d-x的任何数据库。虽然sqlite是首选但不是强制性的。我将在数据库中有大约1/2 MB的数据。所以,是的,我也考虑过保留/使用内存数据库,但我希望我的读/写查询能够节省时间。
我已经查看了一些博客,这些博客表明我可能需要为sqlite使用C ++包装器。问题是,对于一个独立的C ++代码,我可以设置环境,但是我如何将它集成到xcode(在mac os中)以使用sqlite和cocos2d-x。
答案 0 :(得分: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);
答案 1 :(得分:1)
我认为最好的方法是:
使用CCFileUtils::getFileData()打开文件,您将获得文件数据。 例如你的sqlite文件:)
使用CCFileUtils::getWriteablePath()获取可以编写的目录。
将您的数据写入以前的目录,例如使用fstream
现在,您可以使用sqlite3 c++ api的源代码访问您的数据库。
整个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);
答案 2 :(得分:1)
我已经写了一篇关于在xcode中逐步在cocos2d-x游戏中集成sqlite的博客。你可以看到这个 http://sqlite-integration-in-cocos2d-x.blogspot.in/