我们下边介绍如何通过SQLite3提供的API实现MyNotes数据库创建。创建数据库一般需要经过如下三个步骤。
(1) 使用sqlite3_open函数打开数据库。
(2) 使用sqlite3_exec函数执行Create Table语句,创建数据库表。
(3) 使用sqlite3_close函数释放资源。
在这个过程中,我们使用了三个SQLite3 API函数,它们都是纯C语言函数。在Cocos2d-x中通过C++调用C函数当然不是什么问题,NoteDAO.cpp中的NoteDAO::initDB()函数可以初始化数据库,它的相关代码如下:
- int NoteDAO::initDB()
- {
- auto sharedFileUtils = FileUtils::getInstance();
- string path = dbDirectoryFile(); ①
- bool isExist = false;
- isExist = sharedFileUtils->isFileExist(path); ②
- if (!isExist) {
- log("NotesList.sqlite3 doesn't exist.");
- return -1;
- }
- sqlite3* db= NULL;
- if (sqlite3_open(path.c_str(), &db) != SQLITE_OK) { ③
- sqlite3_close(db); ④
- CCASSERT(false, "DB open failure."); ⑤
- } else {
- char *err;
- string createSQL = "CREATE TABLE IF NOT EXISTS
- Note (cdate TEXT PRIMARY KEY, content TEXT)"; ⑥
- if (sqlite3_exec(db,createSQL.c_str(),NULL,NULL,&err) != SQLITE_OK) { ⑦
- sqlite3_close(db); ⑧
- CCASSERT(false, "Create table failure."); ⑨
- }
- sqlite3_close(db); ⑩
- }
- return 0;
- }
上述代码initDB()函数是初始化数据库函数,通过这个函数创建数据库中的表等对象,每次对数据库进行CRUD操作时候都会调用它。这个函数中处理流程是先判断数据库文件NotesList.sqlite3是否存在,如果不存在就是初始化,如果已经存在则跳出该函数。其中代码第①行调用dbDirectoryFile()函数,该函数是我们自己封装的函数,用来获得可写入目录中数据库文件NotesList.sqlite3全路径。第②行代码是判断可写入目录中数据库文件NotesList.sqlite3是否存在,如果不存在程序跳出该函数。
第③行的代码是创建数据库,其中sqlite3_open函数的第一个参数是数据库文件的完整路径,需要注意的是在SQLite3函数中接受的是const char*类型数据,需要将string类型数据使用c_str()函数转换为const char*类型;第二个参数为sqlite3指针变量db的地址;返回值是int类型。在SQLite3中,我们定义了很多常量,如果返回值等于常量SQLITE_OK,则说明创建成功。如果打开数据库失败,我们需要使用第④行代码sqlite3_close(db)关闭数据库释放资源,类似的还有第⑧行和第⑩行代码。第⑤行代码使用CCASSERT断言宏,断言宏是判断第一个参数false情况下抛出异常,终止程序运行,并且输出把第二个参数作为日志内容输出。
第⑥行代码是编写建表SQL语句,代码如下:
CREATE TABLE IF NOT EXISTS Note (cdate TEXT PRIMARY KEY, content TEXT)
建表语句CREATE TABLE IF NOT EXISTS可以判断表是否存在,不存在则创建,存在则不创建。如果使用建表语句CREATE TABLE,在表存在的情况下,这会导致数据抛出异常。类似的还有第⑨行代码。
第⑦行代码是执行建表语句,其中语句sqlite3_exec(db,createSQL.c_str(),NULL,NULL,&err)执行第⑥行的建表SQL语句,sqlite3_exec函数的第一个参数是sqlite3指针变量db的地址,第二个参数是要执行的SQL语句,第三个参数是要回调的函数,第四个参数是要回调函数的参数,第五个参数是执行出错的错误信息。
为了能够调用NoteDAO中的初始化数据库函数initDB(),我们需要在HelloWorldScene场景中调用。HelloWorldScene.cpp主要代码如下:
- void HelloWorld::OnClickMenu1(cocos2d::Ref* pSender)
- {
- NoteDAO::initDB();
- NoteDAO::create("2008-08-16 10:01:02", "初始化数据.");
- }
HelloWorld::OnClickMenu1函数是玩家点击Init DB菜单时候回调的函数,在该函数中通过NoteDAO::initDB()语句实现数据库的初始化。NoteDAO中initDB()函数是静态函数,需要实例化NoteDAO就可以直接调用。下面的NoteDAO::create("2008-08-16 10:01:02", "初始化数据.")语句是调用NoteDAO中的create函数在Note表中插入一条数据。
《Cocos2d-x实战 C++卷》现已上线,各大商店均已开售:
京东:http://item.jd.com/11584534.html
当当:http://product.dangdang.com/23606265.html
互动出版网:http://product.china-pub.com/3770734
《Cocos2d-x实战 C++卷》源码及样章下载地址:
源码下载地址:http://51work6.com/forum.php?mod=viewthread&tid=1155&extra=page%3D1
样章下载地址:http://51work6.com/forum.php?mod=viewthread&tid=1157&extra=page%3D1
相关推荐
游戏数据存储方面,Cocos2d-x提供了SQLite数据库支持,用于本地数据存储。此外,还会讲解如何利用JSON或XML进行数据序列化和反序列化,便于游戏数据的读写和交换。 最后,本书可能会探讨性能优化技巧,如内存管理、...
Tiled Map允许创建复杂的多层地图,并在cocos2d-x中轻松加载和渲染。 5. **事件处理与用户交互**:玩家的触摸或点击需要被正确处理以响应游戏命令。源码中会包含事件监听和处理机制,例如单位选择、指令下达等。 6...
在Cocos2d-x中,你需要在适当的地方(如初始化函数或游戏场景加载时)打开SQLite数据库。这可以通过调用`sqlite3_open()`函数实现,传入数据库文件路径作为参数。如果数据库文件不存在,SQLite会自动创建。 3. **...
Cocos2d-x提供了UserDefault类用于存储用户偏好和游戏进度,或者开发者可能采用了SQLite数据库或JSON文件来保存更复杂的数据。 总的来说,《保卫萝卜》的源代码揭示了Cocos2d-x在2D游戏开发中的应用,涵盖了游戏...
在cocos2d-x中,为了方便开发者处理数据存储,它封装了SQLite3这个轻量级的关系型数据库系统。SQLite3是一个嵌入式数据库,它不需要单独的服务器进程,并且能够直接与应用程序的代码集成。以下将详细讲解cocos2d-x...
Cocos2d-x提供了UserDefault类来存储这类数据,或者你可以选择其他持久化技术如SQLite数据库。 9. **性能优化**:对于实时游戏,性能至关重要。在贪吃蛇示例中,你可以学习到如何避免不必要的计算,优化渲染效率,...
本篇文章将深入探讨如何在Cocos2d-x中操作SQLite数据库。 首先,我们需要了解在Cocos2d-x中集成SQLite的基本步骤。这通常涉及到以下几个关键点: 1. **引入SQLite库**:Cocos2d-x并不直接支持SQLite,因此需要手动...
2. **偏好设置(Prefrences)**:Cocos2D-X中的`UserDefault`类提供了类似手机系统偏好设置的功能,可以方便地存储键值对。例如,你可以用`UserDefault::getInstance()->setIntegerForKey()`存储整数,`UserDefault::...
9. **音频与视频支持**:如何在Cocos2D-x中播放音频文件,以及实现简单的视频播放功能。 10. **网络编程**:学习如何使用Cocos2D-x的网络模块进行数据交换,如HTTP请求、WebSocket通信等。 11. **持久化数据**:...
4. **动画与特效**:讲述Cocos2d-x中的动画系统,包括帧动画、骨骼动画的实现,以及粒子系统和过渡效果的应用。 5. **用户交互**:讲解如何处理触摸事件、键盘事件,实现游戏的输入控制,以及UI组件的创建和布局。 ...
在cocos2d-x中,这通常通过Sprite(精灵)类来实现,每个坦克是一个独立的精灵对象,通过设置其动作、旋转和位置,模拟坦克在屏幕上的移动。射击系统则通过创建和发射子弹精灵,配合物理引擎实现弹道计算,确保子弹...
1. **游戏场景管理**:Cocos2d-x中的Scene类代表游戏的一个屏幕或阶段,源码中会展示如何创建和切换不同的游戏场景,如主菜单、游戏地图、战斗界面等。 2. **精灵(Sprite)与图层(Layer)**:在游戏开发中,精灵...
虽然这个“打飞机”游戏缺少数据库和文件写入操作,但cocos2d-x支持数据存储,例如使用UserDefault进行轻量级的本地数据保存,或者通过SQLite数据库进行更复杂的数据管理。如果游戏需要记录分数、等级等信息,可以...
1. **游戏对象和精灵(Sprites)**:Cocos2D-x中的精灵是游戏场景的基本元素,用来展示静态或动态的2D图像。FlappyBird中的主角小鸟、管道、地面等都是通过精灵来创建的。项目中的“images”文件夹包含了这些精灵的...
Sprite是cocos2d-x中的基本图像元素,可以进行移动、旋转、缩放等操作。通过组合多个Sprite,可以创建复杂的角色或物件。动画则通过SpriteFrameCache管理和Animation类实现,支持帧序列动画和骨骼动画,使得游戏对象...
源码会展示如何在cocos2d-x中实现这些逻辑。 3. **数据结构与算法**:魔塔游戏中,地图、物品、敌人等信息通常需要通过数据结构(如数组、链表、图)进行存储和管理。理解这些数据结构的使用有助于分析源码的结构。...
cocos2d-js 是一个强大的开源游戏开发框架,专为Web平台设计,它基于cocos2d-x引擎,并使用JavaScript进行编程。cocos2d-js 提供了丰富的API,使得开发者能够轻松地创建2D游戏、互动媒体以及应用。在描述中提到的...
《Cocos2D-X游戏开发技术精解》是一本深入探讨Cocos2D-X游戏引擎的专著,旨在帮助开发者掌握使用Cocos2D-X进行游戏制作的核心技术和实践技巧。Cocos2D-X是一个跨平台的游戏开发框架,支持iOS、Android、Windows等多...
Cocos2d-x提供了UI组件,如按钮、文本框等,用于创建用户友好的界面。 9. **持久化数据**:保存玩家的进度、分数等信息,可能需要用到SQLite数据库或文件系统。 10. **多平台支持**:Cocos2d-x的一个重要优势是跨...
《cocos2d-x完整RPG游戏源代码》是一份基于Cocos2d-x框架开发的角色扮演游戏(Role-Playing Game,RPG)的源代码集合。Cocos2d-x是一款跨平台的游戏开发库,它使用C++语言编写,支持iOS、Android、Windows等多个操作...