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,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数据库的工具。
下载地址:http://sourceforge.net/projects/sqlitebrowser/
cocos2d-x中使用sqlite的更多相关文章
- Visual Studio 2010(.NET 4.0)中使用SQLite.NET
Visual Studio 2010(.NET 4.0)中使用SQLite.NET 2011年4月1日 | 分类: DataBase, DOTNET | 标签: .net 4.0, SQLite. ...
- cocos2d-x 3.0rc2中读取sqlite文件
cocos2d-x 3.0rc2中读取sqlite文件的方式,在Android中直接读取软件内的会失败.须要复制到可写的路径下 sqlite3* dbFile = NULL; std::string ...
- Android虚拟机中的sqlite数据库文件
Android虚拟机中的sqlite数据库文件 ①
- Android中的SQLite使用学习
Android中的SQLite使用学习 SQLite是非常流行的嵌入式关系型数据库,轻载, 速度快,而且是开源.在Android中,runtime提供SQLite,所以我们可以使用SQLite,而且是 ...
- C#中使用SQLite数据库简介(上)
[SQLite数据库] SQLite是一个开源的轻量级的桌面型数据库,它将几乎所有数据库要素(包括定义.表.索引和数据本身)都保存在一个单一的文件中.SQLite用C编写实现,它在内存消耗.文件体积. ...
- 在项目中使用SQLite数据库小结
------------------------------------------------------------------------推荐: - VS2012 使用 1.0.84 版的库 - ...
- Android中使用sqlite笔记
1.实现SQLiteHelper来在android中使用SQLite.代码如下,来自android官网. public class FeedReaderDbHelper extends SQLiteO ...
- 在Win8 Mertro 中使用SQLite
在Win8 Mertro 中使用SQLite 分类: .net 开发 2012-09-19 18:17 1229人阅读 评论(3) ...
- Android 开发中使用 SQLite 数据库
SQLite 介绍 SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能. 此外它还是开源的,任何人都可以使用它.许多开源项目((Mozilla, PHP ...
- 2014-08-01 ASP.NET中对SQLite数据库的操作——ADO.NET
今天是在吾索实习的第18天.我主要学习了如何在ASP.NET中对SQLite数据库的操作,其基本操作如下: 添加引用System.Data.SQLite.dll(PS:在网页里面任意找到适合的.NET ...
随机推荐
- 最短路+线段交 POJ 1556 好题
// 最短路+线段交 POJ 1556 好题 // 题意:从(0,5)到(10,5)的最短距离,中间有n堵墙,每堵上有两扇门可以通过 // 思路:先存图.直接n^2来暴力,不好写.分成三部分,起点 终 ...
- JAVA与数据库开发(JDBC-ODBC、SQL Server、MySQL)
1)配置数据库环境和驱动 2)设计数据库结构并创建数据库 3)对数据库进行增删改查操作...
- Codeforces Round #364 (Div.2) C:They Are Everywhere(双指针/尺取法)
题目链接: http://codeforces.com/contest/701/problem/C 题意: 给出一个长度为n的字符串,要我们找出最小的子字符串包含所有的不同字符. 分析: 1.尺取法, ...
- nodejs+express +jade模板引擎 新建项目
先 安装 nodejsiDEAAM 2015/7/16 22:47:25然后安装 npm install expressiDEAAM 2015/7/16 22:47:35然后安装 npm instal ...
- HDU 5762 Teacher Bo (暴力)
Teacher Bo 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5762 Description Teacher BoBo is a geogra ...
- HDU 3974 Assign the task (DFS序 + 线段树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3974 给你T组数据,n个节点,n-1对关系,右边的是左边的父节点,所有的值初始化为-1,然后给你q个操 ...
- WinDbg x 64 使用 SOS: 无法找到运行时 DLL (clr.dll)
http://www.datazx.cn/Forums/en-US/59aa78c9-dc05-43c8-9efe-e7b132056afc/action?threadDisplayName=win ...
- SQLServer2008设置开启INTERNET远程连接
SQL Server 2008默认是不允许远程连接的,sa帐户默认禁用的,如果想要在本地用SSMS连接远程服务器上的SQL Server 2008,需要做两个部分的配置: 使用sa账户登录SQL Se ...
- C语言signal处理的小例子
[pgsql@localhost tst]$ cat sig01.c #include <stdio.h> #include <signal.h> static void tr ...
- iOS开发——UI篇OC篇&layoutSubviews和drawRect
layoutSubviews和drawRect 首先两个方法都是异步执行.layoutSubviews方便数据计算,drawRect方便视图重绘. layoutSubviews在以下情况下 ...