博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cocos2d-x中使用sqlite
阅读量:7047 次
发布时间:2019-06-28

本文共 2770 字,大约阅读时间需要 9 分钟。

 

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

下载地址:

下载后,在项目中导入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,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,sql.getCString(),NULL,NULL,NULL);  		if(result != SQLITE_OK)  			CCLog("insert data failed!"); 	}	// special tool	sql = "CREATE TABLE special_tool(ID INTEGER PRIMARY KEY,state INTEGER DEFAULT 0,count INTEGER DEFAULT 0)";	result = sqlite3_exec(m_pDb, sql.getCString(), NULL,NULL,NULL);	if(result != SQLITE_OK)  		CCLog("create table failed");  	for (int i=0; i<20; ++i)	{		sql.initWithFormat("insert into special_tool values(%d, 0, 0)", i+1);  		result = sqlite3_exec(m_pDb,sql.getCString(),NULL,NULL,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",&re,&r,&c,NULL);  		CCLog("special_tool row is %d,column is %d",r,c);  		m_specialItemState.clear();		m_specialItem.clear();		for (int i=0; i< 20; ++i)		{			CCLog("row %d ---> id = %s, state = %s, count = %s", i+1, re[c + i*c], 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数据库的工具。

下载地址:

 

 

 

 

 

 

转载于:https://www.cnblogs.com/songcf/p/3799212.html

你可能感兴趣的文章
nginx location配置详细解释
查看>>
matlab练习程序(感知哈希对比图片)
查看>>
命令模式(C++)
查看>>
ORM
查看>>
计算机网络:网际层
查看>>
python-ConfigParser模块【读写配置文件】
查看>>
wireshark使用方法总结
查看>>
PHP流程控制的替代语法
查看>>
完全解析H3C路由器动态NAT配置步骤
查看>>
天涯的运维之路
查看>>
运维人员低学历者要不要补学历?何时补合适?
查看>>
【原创】日志表设计一例分析
查看>>
nmcli网卡绑定与teaming配置
查看>>
为什么还是穷人:工作的态度
查看>>
Provisioning Services 7.8 入门系列教程之三 安装并配置 Provisioning Services
查看>>
RHEL6基础三十之服务器维护基础命令①netstat
查看>>
Puppet 实验十 centos 安装 puppet-dashboard 仪表盘
查看>>
SQL Server 2017 AlwaysOn on Linux 配置和维护(11)
查看>>
C#基础知识整理:基础知识(7) 方法的隐藏
查看>>
SQL Server可以锁定的资源类型
查看>>