cocos2d-x中使用sqlite

前端之家收集整理的这篇文章主要介绍了cocos2d-x中使用sqlite前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在单机游戏中有几十个场景道具,每一个都有各自的状态(获得、未获得、获得个数)等等,如果在游戏中平凡涉及到这些道具的实时存储,那么使用文本就会稍慢、可以使用sqlite数据库来完成。

下载地址:http://www.sqlite.org/download.html

下载后,在项目中导入sqlite3.c和sqlite3.h两个文件即可。

附上使用代码:(如果表不存在,创建两个表、存储两种道具,再获取两个表中的数据)

        #include "sqlite/sqlite3.h"
      m_pDb = NULL; //sqlite3 *m_pDb; string path = "infor\\data.db"; //创建的txt文本,随便改个后缀名 #if CC_TARGET_PLATFORM != CC_PLATFORM_WIN32 path = CCFileUtils::sharedFileUtils()->getWritablePath()+"infor\\data.db"; #endif CCString sql; int result; result = sqlite3_open(path.c_str(),&m_pDb); if(result != sqlITE_OK) { CCLog("open database Failed,number%d",result); m_pDb = NULL; return; } // help map sql = "CREATE TABLE help_map(ID INTEGER PRIMARY KEY,count INTEGER DEFAULT 0)"; result = sqlite3_exec(m_pDb,sql.getCString(),NULL,NULL); if(result != sqlITE_OK) CCLog("create table Failed"); for (int i=0; i<100; ++i) { sql.initWithFormat("insert into help_map values(%d,0)",i+1); result = sqlite3_exec(m_pDb,NULL); if(result != sqlITE_OK) CCLog("insert data Failed!"); } // special tool sql = "CREATE TABLE special_tool(ID INTEGER PRIMARY KEY,state INTEGER DEFAULT 0,NULL); if(result != sqlITE_OK) CCLog("create table Failed"); for (int i=0; i<20; ++i) { sql.initWithFormat("insert into special_tool values(%d,NULL); if(result != sqlITE_OK) CCLog("insert data Failed!"); } //select char **re; int r,c; { //第3个参数是查询结果,它依然一维数组(不要以为是二维数组,更不要以为是三维数组)。 //它内存布局是:第一行是字段名称,后面是紧接着是每个字段的值 // col个数据之后才是表数据,之前的是列名字 result = sqlite3_get_table(m_pDb,"select * from help_map",&re,&r,&c,NULL); CCLog("help_map: row is %d,column is %d",r,c); m_helpMap.clear(); for (int i=0; i< 100; ++i) { CCLog("row %d ---> id = %s,count = %s",i+1,re[c + i*c],re[c + i*c +1]); int val = CCString(re[c + i*c +1]).intValue(); m_helpMap.push_back(val); } sqlite3_free_table(re); } { result = sqlite3_get_table(m_pDb,"select * from special_tool",NULL); CCLog("special_tool row is %d,c); m_specialItemState.clear(); m_specialItem.clear(); for (int i=0; i< 20; ++i) { CCLog("row %d ---> id = %s,state = %s,re[c + i*c +1],re[c + i*c + 2]); int val = CCString(re[c + i*c +1]).intValue(); m_specialItemState.push_back(val); val = CCString(re[c + i*c +2]).intValue(); m_specialItem.push_back(val); } sqlite3_free_table(re); }

其实在程序中存储道具用的vector可以换成一个hash表,因为表中元素的主键是线性增长的,这样访问每个元素的时间复杂度仅o(1)。

data.db(创建的数据库文件)里面插入数据后,想看一下有些什么数据、或者策划人员负责维护里面的数据表,可以下载sqlite database browser,一个非常不错的浏览sqlite数据库的工具。

下载地址:http://sourceforge.net/projects/sqlitebrowser/

原文链接:https://www.f2er.com/cocos2dx/343205.html

猜你在找的Cocos2d-x相关文章