当局分数的打印和最高分数的记录

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中数据的存储的更多相关文章

  1. Android笔记——Android中数据的存储方式(二)

    我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效 ...

  2. Android笔记——Android中数据的存储方式(一)

    Android中数据的存储方式 对于开发平台来讲,如果对数据的存储有良好的支持,那么对应用程序的开发将会有很大的促进作用. 总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.其 ...

  3. Matlab中数据的存储方式

    简介 MATLAB提供了丰富的算法以及一个易于操作的语言,给算法研发工作者提供了很多便利.然而MATLAB在执行某些任务的时候,执行效率偏低,测试较大任务量时可能会引起较长时间的等待.未解决这个问题, ...

  4. Android笔记——Android中数据的存储方式(三)

    Android系统集成了一个轻量级的数据库:SQLite,所以Android对数据库的支持很好,每个应用都可以方便的使用它.SQLite作为一个嵌入式的数据库引擎,专门适用于资源有限的设备上适量数据存 ...

  5. 【Cocos2d-X开发学习笔记】第29期:游戏中数据的存储(上)

    本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010 一般游戏中都需要记录玩家数据,便于玩家下次登录时 ...

  6. 【Cocos2d-X开发学习笔记】第30期:游戏中数据的存储(下)

    本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010 一.对数据进行编解码 在上一期中,我们使用了CC ...

  7. C/C++中数据的存储

    学java时了解到不同的数据在系统中存储的位置不一样,有的存在栈里,有的存在堆里.学C/C++时没注意过这个,最近学数据结构时遇到了问题:在定义一个结构体的指针时,系统如何给它分配的空间?从而让我想去 ...

  8. 关于Cocos2d-x中数据的存储提取和类型转换

    1.获得存储在UserDefault中的变量,但是获得的变量是一个String类型的值,要用atoi函数转换为整型,但是atoi函数的传递参数是一个char*类型的值,所以用_Score.c_str( ...

  9. Unity中数据的存储与交互的初步分析(PlayerPrefs,Dictionary,JsonUnility)

    1.PlayerPrefs   PlayerPrefs.SetString(key,Value);  PlayerPrefs.GetString(key,Value);字符串类型 PlayerPref ...

随机推荐

  1. Android特性与系统架构

    Android特性与系统架构 一.Android特性 • 应用程序框架支持组件的重用与替换 • Dalvik 虚拟机专为移动设备优化 • 集成的浏览器基于开源的WebKit 引擎 • 优化的图形库包括 ...

  2. python解压压缩包的几种方法

    这里讨论使用Python解压例如以下五种压缩文件: .gz .tar  .tgz .zip .rar 简单介绍 gz: 即gzip.通常仅仅能压缩一个文件.与tar结合起来就能够实现先打包,再压缩. ...

  3. STM32F4—fsmc的配置步骤

    0:开启GPIO时钟和FSMC时钟 1:配置GPIO 2:配置片选控制寄存器 3:配置片选时序寄存器 4:配置写入时序寄存器 GPIO_InitTypeDef GPIO_InitStructure;/ ...

  4. SpringMVC中异常处理详解

    Spring MVC处理异常最基本的就是HandlerExceptionResolver这个接口,先看张图 分析上图可以轻松总结出,spring mvc里有三种异常处理方法: 1.使用官方提供的简单异 ...

  5. REST技术第三步 @BeanParam的使用

    我简介下rest中@BeanParam的使用 我们来做一个计算加法的服务. 提供两个參数a和b,计算出a+b. 參数都在URL里 就是类似这样的效果. 这次用上@BeanParam 首先写个POJO来 ...

  6. Bash Shell启动配置脚本的顺序

    1.Bash检查环境变量文件的方式,取决于系统运行Shell的方式,通常系统运行Shell有3种方式: )通过系统用户登陆后默认运行的Shell )非登陆交互式运行Shell )执行脚本运行非交互式S ...

  7. 易懂的modelsim学习笔记

    1. 建一个总文件夹,如cnt2. 为源代码,测试台文件,仿真各建一文件夹.如src,tb,sim3. 编写源代码,testbench.如cnt.v,tb_cnt.v文件,同时文件名里的模块名与文件名 ...

  8. 【Android】11.0 第11章 活动和片段--本章示例主界面

    分类:C#.Android.VS2015: 创建日期:2016-02-21 一.简介 这一章我们学习activity和fragment,深入理解activity和fragment的生命周期是如何工作的 ...

  9. 苹果开发小记(一):NSString 的比较用法

    转自:http://blog.sina.com.cn/s/blog_897dd7be0100teh6.html 做了几个月的苹果,很多的思想方法都可以遵循一定规律来做的.NSString 比较字符串, ...

  10. linux 打包为zip压缩包

    [root@nb linux学习]# zip -r dir.zip dir文件夹/ file文件 adding: dir文件夹/ (stored %) adding: file文件 (deflated ...