关于Cocos2d-x中数据的存储
当局分数的打印和最高分数的记录
1.首先定义一个Label类型的节点在GameScene.cpp的init方法中,设置初始分数为0
_myScore = 0;
scorelabel = Label::createWithSystemFont("Score: 0", "Arial", 36);
scorelabel->setAnchorPoint(Vec2(1, 0));
scorelabel->setColor(Color3B::BLACK);
scorelabel->setPosition(size.width, size.height - scorelabel->getContentSize().height);
this->addChild(scorelabel,2);
2.当满足某个加分条件时,改变Label的文本值(没必要放在什么Update方法中,效率太低)
//如果敌方飞机挂了,玩家增加分数,加1分
_myScore += 1;
char buf[100] = { 0 };
sprintf(buf, "Score: %d", _myScore);
scorelabel->setString(buf);
3.满足游戏结束的条件时执行publishScore();方法,把这局游戏的分数存储到一个UserDefault.XML文件里面,这个UserDefault.XML文件是Cocos2d-x自己可以设计生成的一个小型数据库文件,更多的时候是用来记录玩家的最高记录时使用的。
//如果玩家生命值为0,游戏结束
publishScore(); //满足游戏结束的条件时执行
void GameScene::publishScore()
{
auto userdefault = UserDefault::getInstance();
//查看路径,测试用
//log(userdefault->getXMLFilePath().c_str());
//存储本次游戏分数
char score_str[100] = { 0 };
sprintf(score_str, "%d", _myScore);
userdefault->setStringForKey("LastScore", score_str);
//存储最佳游戏分数
auto bestscore = userdefault->getStringForKey("BestScore");
if (_myScore > atoi(bestscore.c_str()))
userdefault->setStringForKey("BestScore", score_str);
}
4.在游戏结束的界面GameOver.cpp的init方法中,添加两个Label节点,分别打印出这局游戏的最终分数以及玩家的最高分数。
//显示本次分数,位于中间
auto score = UserDefault::getInstance()->getStringForKey("LastScore");
auto labelscore = Label::createWithTTF(score, "fonts/Marker Felt.ttf", 36);
labelscore->setColor(Color3B::BLACK);
labelscore->setPosition(Vec2(labelscore->getContentSize().width / 2 + 50, visibleSize.height - labelscore->getContentSize().height / 2 - 120));
addChild(labelscore);
//显示最佳分数,位于左上
auto bestscore = UserDefault::getInstance()->getStringForKey("BestScore");
auto labelbestscore = Label::createWithSystemFont(bestscore, "Arial", 36);
labelbestscore->setColor(Color3B::BLACK);
labelbestscore->setPosition(Vec2(labelbestscore->getContentSize().width / 2 + 50, visibleSize.height - labelbestscore->getContentSize().height / 2 - 80));
addChild(labelbestscore);
注意:
1.记录最高分数是记录在UserDefault.XML文件中,所以关掉游戏,下次再打开,还是那个最高分数,这个和C/C++中文件操作的原理差不多。要想知道UserDefault.XML文件在哪里,可以用测试语句打印出UserDefault.XML文件的路径
//查看路径,测试用
log(userdefault->getXMLFilePath().c_str());
这个例子的路径是在
C:/Users/Administrator/AppData/Local/NoOneDies_st/UserDefault.xml
所以一般都是在C:/Users/Administrator/AppData/Local/游戏名/UserDefault.xml这种格式的路径下,就算删除了,下次运行游戏的时候也会自动再生成,不过最高分数会变成0,这种做法也可以用在平时写代码清零的时候,删一删这个文件。不然不管你开游戏关游戏多少次,最高分数还是那个,不会改变的,已经记录在我们电脑的文件上了。
2.如果Label无缘无故不显示在场景的层中,很可能是因为和场景的层的颜色一样,导致看不见。
关于Cocos2d-x中数据的存储的更多相关文章
- Android笔记——Android中数据的存储方式(二)
我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效 ...
- Android笔记——Android中数据的存储方式(一)
Android中数据的存储方式 对于开发平台来讲,如果对数据的存储有良好的支持,那么对应用程序的开发将会有很大的促进作用. 总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.其 ...
- Matlab中数据的存储方式
简介 MATLAB提供了丰富的算法以及一个易于操作的语言,给算法研发工作者提供了很多便利.然而MATLAB在执行某些任务的时候,执行效率偏低,测试较大任务量时可能会引起较长时间的等待.未解决这个问题, ...
- Android笔记——Android中数据的存储方式(三)
Android系统集成了一个轻量级的数据库:SQLite,所以Android对数据库的支持很好,每个应用都可以方便的使用它.SQLite作为一个嵌入式的数据库引擎,专门适用于资源有限的设备上适量数据存 ...
- 【Cocos2d-X开发学习笔记】第29期:游戏中数据的存储(上)
本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010 一般游戏中都需要记录玩家数据,便于玩家下次登录时 ...
- 【Cocos2d-X开发学习笔记】第30期:游戏中数据的存储(下)
本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010 一.对数据进行编解码 在上一期中,我们使用了CC ...
- C/C++中数据的存储
学java时了解到不同的数据在系统中存储的位置不一样,有的存在栈里,有的存在堆里.学C/C++时没注意过这个,最近学数据结构时遇到了问题:在定义一个结构体的指针时,系统如何给它分配的空间?从而让我想去 ...
- 关于Cocos2d-x中数据的存储提取和类型转换
1.获得存储在UserDefault中的变量,但是获得的变量是一个String类型的值,要用atoi函数转换为整型,但是atoi函数的传递参数是一个char*类型的值,所以用_Score.c_str( ...
- Unity中数据的存储与交互的初步分析(PlayerPrefs,Dictionary,JsonUnility)
1.PlayerPrefs PlayerPrefs.SetString(key,Value); PlayerPrefs.GetString(key,Value);字符串类型 PlayerPref ...
随机推荐
- Android特性与系统架构
Android特性与系统架构 一.Android特性 • 应用程序框架支持组件的重用与替换 • Dalvik 虚拟机专为移动设备优化 • 集成的浏览器基于开源的WebKit 引擎 • 优化的图形库包括 ...
- python解压压缩包的几种方法
这里讨论使用Python解压例如以下五种压缩文件: .gz .tar .tgz .zip .rar 简单介绍 gz: 即gzip.通常仅仅能压缩一个文件.与tar结合起来就能够实现先打包,再压缩. ...
- STM32F4—fsmc的配置步骤
0:开启GPIO时钟和FSMC时钟 1:配置GPIO 2:配置片选控制寄存器 3:配置片选时序寄存器 4:配置写入时序寄存器 GPIO_InitTypeDef GPIO_InitStructure;/ ...
- SpringMVC中异常处理详解
Spring MVC处理异常最基本的就是HandlerExceptionResolver这个接口,先看张图 分析上图可以轻松总结出,spring mvc里有三种异常处理方法: 1.使用官方提供的简单异 ...
- REST技术第三步 @BeanParam的使用
我简介下rest中@BeanParam的使用 我们来做一个计算加法的服务. 提供两个參数a和b,计算出a+b. 參数都在URL里 就是类似这样的效果. 这次用上@BeanParam 首先写个POJO来 ...
- Bash Shell启动配置脚本的顺序
1.Bash检查环境变量文件的方式,取决于系统运行Shell的方式,通常系统运行Shell有3种方式: )通过系统用户登陆后默认运行的Shell )非登陆交互式运行Shell )执行脚本运行非交互式S ...
- 易懂的modelsim学习笔记
1. 建一个总文件夹,如cnt2. 为源代码,测试台文件,仿真各建一文件夹.如src,tb,sim3. 编写源代码,testbench.如cnt.v,tb_cnt.v文件,同时文件名里的模块名与文件名 ...
- 【Android】11.0 第11章 活动和片段--本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-02-21 一.简介 这一章我们学习activity和fragment,深入理解activity和fragment的生命周期是如何工作的 ...
- 苹果开发小记(一):NSString 的比较用法
转自:http://blog.sina.com.cn/s/blog_897dd7be0100teh6.html 做了几个月的苹果,很多的思想方法都可以遵循一定规律来做的.NSString 比较字符串, ...
- linux 打包为zip压缩包
[root@nb linux学习]# zip -r dir.zip dir文件夹/ file文件 adding: dir文件夹/ (stored %) adding: file文件 (deflated ...