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

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. C语言宏高级用法

    1.前言  今天看代码时候,遇到一些宏,之前没有见过,感觉挺新鲜.如是上网google一下,顺便总结一下,方便以后学习和运用.C语言程序中广泛的使用宏定义,采用关键字define进行定义,宏只是一种简 ...

  2. 乙醇的webdriver实用指南ruby版本

    webdriver实用指南是乙醇2013年分享计划的一部分,作为对已逝去的selenium2时代的追忆. 目录如下 启动浏览器 关闭浏览器 浏览器最大化 设置浏览器大小 访问链接 打印当前页面的tit ...

  3. 【驱动笔记11】使用DeviceIoControl通信

    文章作者:grayfox作者主页:http://nokyo.blogbus.com原始出处:http://www.blogbus.com/nokyo-logs/34018521.html 在我昨日发布 ...

  4. echarts geo地图坐标转换为页面Offset坐标

    https://github.com/apache/incubator-echarts/issues/2540 代码示例: // 获取系列 ) // 获取地理坐标系实例 var coordSys = ...

  5. Mybatis里Mapper映射sql文件里insert的主键返回selectKey使用

    有时候新增一条数据,知道新增成功即可,但是有时候,需要这条新增数据的主键,以便逻辑使用,再将其查询出来明显不符合要求,效率也变低了. 这时候,通过一些设置,mybatis可以将insert的数据的主键 ...

  6. [Jobdu] 题目1530:最长不重复子串

    题目描述: 最长不重复子串就是从一个字符串中找到一个连续子串,该子串中任何两个字符都不能相同,且该子串的长度是最大的. 输入: 输入包含多个测试用例,每组测试用例输入一行由小写英文字符a,b,c... ...

  7. Python shell对比

    对Python.shell的一些思考 如果使用python去写脚本来处理日常事务的话,相对于shell是一件比较麻烦的事情,因为我可以使用shell在花费更少的时间内,比较熟练地使用awk.sed和g ...

  8. <实战> 通过分析Heap Dump 来了解 Memory Leak ,Retained Heap,Shallow Heap

    引入: 最近在和别的团队的技术人员聊天,发现很多人对于堆的基本知识都不太熟悉,所以他们不能很好的检测出memory leak问题,这里就用一个专题来讲解如何通过分析heap dump文件来查找memo ...

  9. 解决老是提示找不到Mapper文件无法执行定义的方法问题!

    尼玛,被mybatis的*Mapper.xml文件害惨了!整整两天都在围绕这个问题转圈! 先看问题长啥样吧!下面是通过逆向工程生成的Mapper.xml文件,包路径什么的都没有错! 但是每次调用Map ...

  10. K-Means聚类算法的原理及实现【转】

    [转]http://www.aboutyun.com/thread-18178-1-1.html 问题导读:1.如何理解K-Means算法?2.如何寻找K值及初始质心?3.如何应用K-Means算法处 ...