cocos2dxv3.2FlappyBird各个类对象具体代码分析(6)
今天我们要讲三个类,这三个类应该算比较简单的
HelpLayer类
NumberLayer类
GetLocalScore类
HelpLayer类,主要放了两个图形精灵上去,一个是游戏的名字,一个是提示游戏怎么玩的,就一张图:

NumberLayer类,涉及到自定义字体的制作,我们提取出来的资源里,有很多数字图片:

现在我们要把它们做成这样子的:

这个跟游戏图片资源差不多,做成这样就可以直接拿来用,省了很多事情,那怎么做了,这里我们要用到一个叫

介绍的很详细,也感谢这个作者。NumberLayer类这个类中还有一个问题就是单例实现,单例类:顾名思义它就只有一个实例,有时候,一个功能类有很多的实例,会让程序变得十分复杂,单例类解决了这个问题。
GetLocalScore类,本地数据的存取,这个类也很简单,都是调用了,cocos2d-x的一些接口,所以没什么难度。
下面就是这三个类的代码分析:
//HelpLayer.h #pragma once #include "cocos2d.h" class HelpLayer:public cocos2d::Layer { public: HelpLayer(); ~HelpLayer(); bool init(); //回调函数 void callBack(); CREATE_FUNC(HelpLayer); private: //单点触控侦听 cocos2d::EventListenerTouchOneByOne * listener; cocos2d::Sprite * gameName; cocos2d::Sprite * tutorial; };//HelpLayer.cpp #include "HelpLayer.h" USING_NS_CC; HelpLayer::HelpLayer() { } HelpLayer::~HelpLayer() { } bool HelpLayer::init() { if (!Layer::init()) { return false; } auto origin=Director::getInstance()->getVisibleOrigin(); auto visibleSize=Director::getInstance()->getVisibleSize(); //游戏名字 gameName=Sprite::createWithSpriteFrameName("text_ready.png"); gameName->setPosition(Point(origin.x+visibleSize.width*0.5,origin.y+visibleSize.height*0.8)); this->addChild(gameName); //玩法提示 tutorial=Sprite::createWithSpriteFrameName("tutorial.png"); tutorial->setPosition(Point(origin.x+visibleSize.width*0.5,origin.y+visibleSize.height*0.4)); this->addChild(tutorial); //单点触控侦听,前面几章说到过,这边就不说了 listener=EventListenerTouchOneByOne::create(); listener->setSwallowTouches(false); listener->onTouchBegan=[](Touch * t,Event * e) { log("touch began"); return true; }; listener->onTouchEnded=[=](Touch *t,Event * e) { //这个layer单击一下就会消失,所以这边检测到点击的时候 //就会从事件分发器中移除这个侦听 _eventDispatcher->removeEventListener(listener); //这个渐隐动画,因为执行动画的有两个精灵,要有两个这样的动画 //所以fade_2克隆了一个fade auto fade=FadeOut::create(0.5f); //克隆 auto fade_2=fade->clone(); //动画执行+回调函数 auto callback=CallFuncN::create(CC_CALLBACK_0(HelpLayer::callBack,this)); auto sequence=Sequence::create(fade,callback,NULL); tutorial->runAction(sequence); gameName->runAction(fade_2); }; //上次讲侦听的时候可能没讲,每一个侦听都要加入到事件分发器中,就是下面这句代码 //第一个参数就是我们的侦听,第二个参数是要加这个侦听的对象 //这里我们的点击对象就是这整个层,所以是this _eventDispatcher->addEventListenerWithSceneGraphPriority(listener,this); return true; } //移除这两个精灵 void HelpLayer::callBack() { this->removeChild(tutorial); this->removeChild(gameName); }
//NumberLayer.h #pragma once #include "cocos2d.h" class NumberLayer:public cocos2d::Layer { public: NumberLayer(); ~NumberLayer(); bool init(); //加分 void addScore(); //初始化分数 void initScore(); //获得分数 int getScore(); //获得单例对象 static NumberLayer * getInstance(); private: cocos2d::Label * numberLabel; int score; };
//NumberLayer.cpp #include "NumberLayer.h" USING_NS_CC; //唯一存在的自身对象(这边一定要赋初值null),注意是静态的 static NumberLayer * instance=NULL; NumberLayer::NumberLayer() { } NumberLayer::~NumberLayer() { } //单例类最主要部分 NumberLayer * NumberLayer::getInstance() { //判断这个对象是否存在 if (instance==NULL) { //如果不存在,那就创建 NumberLayer * temp=new NumberLayer(); //然后初始化 temp->init(); instance=temp; } //如果已经存在了,那就直接返回 return instance; } bool NumberLayer::init() { if (!Layer::init()) { return false; } auto origin=Director::getInstance()->getVisibleOrigin(); auto visibleSize=Director::getInstance()->getVisibleSize(); //初始化分数 score=0; //这是自定义字体的使用 auto str=__String::createWithFormat("%d",score); numberLabel=Label::createWithBMFont("font1.fnt",str->getCString()); numberLabel->setPosition(Point(origin.x+visibleSize.width/2,origin.y+visibleSize.height*0.85)); this->addChild(numberLabel); return true; } void NumberLayer::addScore() { score++; auto str=__String::createWithFormat("%d",score); numberLabel->setString(str->getCString()); } void NumberLayer::initScore() { score=0; auto str=__String::createWithFormat("%d",score); numberLabel->setString(str->getCString()); } int NumberLayer::getScore() { return score; }
//GetLocalScore.h #pragma once #include "cocos2d.h" class GetLocalScore { public: GetLocalScore(); ~GetLocalScore(); static GetLocalScore * getInstance(); //判断是否存在本地文件 bool isHaveLocalFile(); //获取本地文件中的分数 int getHighScore(); //写入本地文件分数 void setHighScore(int); private: };
//GetLocalScore.cpp
#include "GetLocalScore.h"
USING_NS_CC;
static GetLocalScore * instance=NULL;
GetLocalScore::GetLocalScore()
{
}
GetLocalScore::~GetLocalScore()
{
}
//这边单例就不介绍了
GetLocalScore * GetLocalScore::getInstance()
{
if (instance==NULL)
{
GetLocalScore * temp=new GetLocalScore();
instance=temp;
}
return instance;
}
bool GetLocalScore::isHaveLocalFile()
{
//直接去获取这个值,如果存在,返回true
if (UserDefault::getInstance()->getBoolForKey("isHaveLocalFile"))
{
return true;
}
else
{
//如果不存在,那就创建,并写入分数
//如果写入的数据是bool型,就用setBoolForKey
//如果写入的数据是int型,就用setIntegerForKey
//还有别的类型的写入,方法差不多,这里就不介绍了
UserDefault::getInstance()->setBoolForKey("isHaveLocalFile",true);
UserDefault::getInstance()->setIntegerForKey("highScore",0);
UserDefault::getInstance()->flush();
return false;
}
}
//获得分数
int GetLocalScore::getHighScore()
{
if (isHaveLocalFile())
{
return UserDefault::getInstance()->getIntegerForKey("highScore");
}
else
{
return 0;
}
}
//写入分数
void GetLocalScore::setHighScore( int n)
{
if (isHaveLocalFile())
{
UserDefault::getInstance()->setIntegerForKey("highScore",n);
UserDefault::getInstance()->flush();
}
else
{
UserDefault::getInstance()->setBoolForKey("isHaveLocalFile",true);
UserDefault::getInstance()->setIntegerForKey("highScore",n);
UserDefault::getInstance()->flush();
}
}
相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://www.juheyunku.com/jiaob/yd/9973.shtml
相关文章
热门TAG
命令 权重 外链 企业网站 白帽 php 织梦教程 dedecms修改内容 javascript 织梦 功能 标签 调用 详解 服务器 网站流量 实例解析 Dedecms 织梦cms HTML tags标签 python jquery教程 jquery windows SEO优化 蜘蛛 搜索引擎 网站收录 JSP最新文章
-
cocos2dxv3.2FlappyBird各个类对
时间:2020-12-28
-
来点不一样的:前端手指
时间:2020-12-28
-
Cocos2d-x3.2android平台新手开
时间:2020-12-28
-
模板中的TemplateBinding问题
时间:2020-12-28
-
从中间件的历史来看移动
时间:2020-12-28
-
web移动前端的click点透问题
时间:2020-12-28
-
微信小程序开发环境搭建
时间:2020-12-28
热门文章
-
从中间件的历史来看移动App开发的未来
时间:2020-12-28
-
模板中的TemplateBinding问题
时间:2020-12-28
-
cocos2dxv3.2FlappyBird各个类对象具体代码分析
时间:2020-12-28
-
来点不一样的:前端手指操
时间:2020-12-28
-
微信小程序开发环境搭建
时间:2020-12-28
-
web移动前端的click点透问题
时间:2020-12-28
-
Cocos2d-x3.2android平台新手开发环境配置教程
时间:2020-12-28
