在单机游戏中有几十个场景道具,每一个都有各自的状态(获得、未获得、获得个数)等等,如果在游戏中平凡涉及到这些道具的实时存储,那么使用文本就会稍慢、可以使用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的更多相关文章

  1. 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. ...

  2. cocos2d-x 3.0rc2中读取sqlite文件

    cocos2d-x 3.0rc2中读取sqlite文件的方式,在Android中直接读取软件内的会失败.须要复制到可写的路径下 sqlite3* dbFile = NULL; std::string ...

  3. Android虚拟机中的sqlite数据库文件

    Android虚拟机中的sqlite数据库文件 ①

  4. Android中的SQLite使用学习

    Android中的SQLite使用学习 SQLite是非常流行的嵌入式关系型数据库,轻载, 速度快,而且是开源.在Android中,runtime提供SQLite,所以我们可以使用SQLite,而且是 ...

  5. C#中使用SQLite数据库简介(上)

    [SQLite数据库] SQLite是一个开源的轻量级的桌面型数据库,它将几乎所有数据库要素(包括定义.表.索引和数据本身)都保存在一个单一的文件中.SQLite用C编写实现,它在内存消耗.文件体积. ...

  6. 在项目中使用SQLite数据库小结

    ------------------------------------------------------------------------推荐: - VS2012 使用 1.0.84 版的库 - ...

  7. Android中使用sqlite笔记

    1.实现SQLiteHelper来在android中使用SQLite.代码如下,来自android官网. public class FeedReaderDbHelper extends SQLiteO ...

  8. 在Win8 Mertro 中使用SQLite

    在Win8 Mertro 中使用SQLite 分类:             .net 开发              2012-09-19 18:17     1229人阅读     评论(3)   ...

  9. Android 开发中使用 SQLite 数据库

    SQLite 介绍 SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能. 此外它还是开源的,任何人都可以使用它.许多开源项目((Mozilla, PHP ...

  10. 2014-08-01 ASP.NET中对SQLite数据库的操作——ADO.NET

    今天是在吾索实习的第18天.我主要学习了如何在ASP.NET中对SQLite数据库的操作,其基本操作如下: 添加引用System.Data.SQLite.dll(PS:在网页里面任意找到适合的.NET ...

随机推荐

  1. 多校5 HDU5787 K-wolf Number 数位DP

    // 多校5 HDU5787 K-wolf Number 数位DP // dp[pos][a][b][c][d][f] 当前在pos,前四个数分别是a b c d // f 用作标记,当现在枚举的数小 ...

  2. Codeforces Round #362

    A - Pineapple Incident #pragma comment(linker, "/STACK:102c000000,102c000000") #include &l ...

  3. ldconfig报错 :libstdc++.so.6.0.18-gdb.py不是一个elf文件

    今天安装wxWidgets,输入ldconfig竟然提示 /usr/lib64/libstdc++.so.6.0.18-gdb.py 不是一个elf文件,开头魔数错误 摸不着头脑,上网搜了一下,有说是 ...

  4. Activating Google Cloud Storage

    先决条件 你需要下面的内容: 1.一个Google账户,比如来自Gmail.如果你没有,请在Google account signup site注册. 2.一个新的或已经存在的Google Devel ...

  5. DataSnap与FireDAC三层

    相交资料: http://blog.csdn.net/shuaihj/article/details/6129131http://www.cnblogs.com/hnxxcxg/p/4007876.h ...

  6. labview多个并行循环同时退出

    labview中停止并行的循环 问题: 在labview中我如何停止两个并行的循环?我使用一个局部变量,但是当我停止程序执行后,第二次不能运行程序.我该如何解决这个问题呢? 解答:  你使用局部变量来 ...

  7. [iOS基础控件 - 6.10.6] UIApplicationDelegate & 程序启动过程

    A.概念 1.移动app非常容易受到其他的系统.软件事件的干扰,如来电.锁屏 2.app受到干扰的时候,UIApplication会通知delegate,来代理处理干扰事件 3.delegate可以处 ...

  8. Linux优化之IO子系统监控与调优

    Linux优化之IO子系统 作为服务器主机来讲,最大的两个IO类型 : 1.磁盘IO 2.网络IO 这是我们调整最多的两个部分所在 磁盘IO是如何实现的 在内存调优中,一直在讲到为了加速性能,linu ...

  9. jQuery基础学习6——基本选择器

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 推荐一个CodeProject上的SlideForm控件

    CodeProject有一篇文章介绍了怎么实现一个SlideForm,非常不错,收藏在此. http://www.codeproject.com/KB/dialog/csslideform.aspx ...