cocos2d-x v3.2 FlappyBird 各个类对象具体代码分析(2)
来源:互联网 发布:阿里云计算认证考试 编辑:程序博客网 时间:2024/06/05 01:51
今天分析的是WelcomeScene.h类,这个类是我自己写的,主要为了实现各种资源的加载,声音图片动画,这里主要说明一点,加载到缓存中的资源是全局的,在每个地方都可以调用,为了使这个场景不乏味,我自己添加了背景图片,和简单的loading动画。
要用到的资源:
以welcomeBg.plist和welcomeBg.png 为例这两个文件是对应的,使用一个叫TexturePacker软件把一张一张分散的小图片制作成一张大图片
制作前
制作后
那个plist文件则记录了里面每张图片的坐标和图片的名字
这就是plist文件,可以看到这种数据。具体制作方法还是百度吧。
这里还要讲的就是cocos2d-x里的SpriteFrameCache类,这是个单例类,它能够根据plist文件里的数据,截取对应大图里的纹理,这样用起来很方便。
下面就是代码分析
//这个类主要是实现资源的加载,声音和图片,还有我们猪脚的动画//都加载到缓存中,方便以后使用//WelcomeScene.h#pragma once#include "cocos2d.h"class WelcomeScene:public cocos2d::Layer{public:WelcomeScene();~WelcomeScene();//创建欢迎界面的场景static cocos2d::Scene * createScene();bool init();CREATE_FUNC(WelcomeScene);//加载资源结束后场景切换void loadingDone();private:};
//WelcomeScene.cpp#include "WelcomeScene.h"#include "GameBegin.h"#include "define.h"#include "SimpleAudioEngine.h"USING_NS_CC;WelcomeScene::WelcomeScene(){}WelcomeScene::~WelcomeScene(){}cocos2d::Scene * WelcomeScene::createScene(){auto scene=Scene::create();auto welcomeLayer=WelcomeScene::create();scene->addChild(welcomeLayer);return scene;}bool WelcomeScene::init(){if (!Layer::init()){return false;}auto origin=Director::getInstance()->getVisibleOrigin();auto visibleSize=Director::getInstance()->getVisibleSize();//读取游戏的图片资源SpriteFrameCache::getInstance()->addSpriteFramesWithFile("welcomeBg.plist");SpriteFrameCache::getInstance()->addSpriteFramesWithFile("images.plist");//给场景设置背景auto bg=Sprite::createWithSpriteFrameName("welcomeBg.png");bg->setPosition(Point(origin.x+visibleSize.width/2,origin.y+visibleSize.height/2));this->addChild(bg);//随机种子,因为后面要用到随即数srand((unsigned)time(NULL));//加载声音CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect("sounds/sfx_die.mp3");CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect("sounds/sfx_hit.mp3");CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect("sounds/sfx_point.mp3");CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect("sounds/sfx_swooshing.mp3");CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect("sounds/sfx_wing.mp3");//loading 界面动画加载及播放,这个就是welcomneBg里有三张loading的图片使用//相当于帧动画auto animation=Animation::create();//这里的 LOADING_FRE 就是上一张define.h里面定义了的,是图片播放频率animation->setDelayPerUnit(LOADING_FRE);animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("zt1.png"));animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("zt2.png"));animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("zt3.png"));auto animate=Animate::create(animation);//这里是loading动画播放的次数,LOADING_NUM 在define.h里去找auto repeat=Repeat::create(animate,LOADING_NUM);//这里是回调函数,当loading动画播放完成后,我们要切换场景啊auto callBack=CallFuncN::create(CC_CALLBACK_0(WelcomeScene::loadingDone,this));//然后把动画和回调函数放到一个列队中,先执行动画,动画执行完了回调切场景auto sequence=Sequence::create(repeat,callBack,NULL);//这个是要执行动画的精灵,我们给他定义动画的第一帧auto loading=Sprite::createWithSpriteFrameName("zt1.png");loading->setPosition(Point(origin.x+visibleSize.width/2,origin.y+visibleSize.height/2));this->addChild(loading);//执行动画loading->runAction(sequence);//下面的是我们猪脚小鸟的动画,我们在这里定义好//然后放到缓存中,给它取个名字,下次使用的时候就可以直呼其名//把它召唤出来-.-//这是黄色的那只小鸟挥动翅膀动画auto birdAnimation_0=Animation::create();birdAnimation_0->setDelayPerUnit(BIRD_FLY_FRE);birdAnimation_0->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("bird0_0.png"));birdAnimation_0->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("bird0_1.png"));birdAnimation_0->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("bird0_2.png"));//这里就是把他放到缓存中,然后名字就是 BIRDANIMATION_0 见define.h文件AnimationCache::getInstance()->addAnimation(birdAnimation_0,BIRDANIMATION_0);//这是蓝色的那只小鸟挥动翅膀动画auto birdAnimation_1=Animation::create();birdAnimation_1->setDelayPerUnit(BIRD_FLY_FRE);birdAnimation_1->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("bird1_0.png"));birdAnimation_1->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("bird1_1.png"));birdAnimation_1->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("bird1_2.png"));AnimationCache::getInstance()->addAnimation(birdAnimation_1,BIRDANIMATION_1);//这是红色的那只小鸟挥动翅膀动画auto birdAnimation_2=Animation::create();birdAnimation_2->setDelayPerUnit(BIRD_FLY_FRE);birdAnimation_2->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("bird2_0.png"));birdAnimation_2->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("bird2_1.png"));birdAnimation_2->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("bird2_2.png"));AnimationCache::getInstance()->addAnimation(birdAnimation_2,BIRDANIMATION_2);return true;}//这个就是loading动画执行完后的回调函数void WelcomeScene::loadingDone(){//我们切换到了GameBegin这个场景了Director::getInstance()->replaceScene(GameBegin::createScene());}
这是运行结果......其实我们加载了很多东西-.-
今天就到这里了
0 0
- cocos2d-x v3.2 FlappyBird 各个类对象具体代码分析(2)
- cocos2d-x v3.2 FlappyBird 各个类对象具体代码分析(1)
- cocos2d-x v3.2 FlappyBird 各个类对象具体代码分析(3)
- cocos2d-x v3.2 FlappyBird 各个类对象具体代码分析(4)
- cocos2d-x v3.2 FlappyBird 各个类对象具体代码分析(5)
- cocos2d-x v3.2 FlappyBird 各个类对象具体代码分析(6)
- cocos2d-x v3.2 FlappyBird 各个类对象具体代码分析(7)
- cocos2d-x V3.x内存管理分析
- cocos2d-x V3.x内存管理分析
- Cocos2d-x V3.x内存管理分析
- Cocos2d-x v3.2 例程中的 SpriteBlur
- cocos2d-x v3.0代码差异
- Cocos2d-x V3.4 项目模板分析
- Cocos2d-x v3.2笔记——Cocos2d-x 3.x新事件分发机制总结
- Cocos2d-x v3.2笔记——总结Cocos2d-x 3.x版本的一些变化
- linux下使用qt5.2+cocos2d-x v3.0 alpha1
- cocos2d-x v3.2 触摸事件派发机制
- Mac搭建Cocos2d-x v3.2 Android开发环境
- 网狐机器人玩一局就退出的原因
- Cocos2d-x学习笔记(四)-------->场景切换
- C程序编译执行过程(转载)
- 求全组合
- App模块化及工程扩展
- cocos2d-x v3.2 FlappyBird 各个类对象具体代码分析(2)
- try_module_get和module_put
- Flex更改Alert提示框的字体大小和样式
- UITextField控件之ValueChanged事件
- 《UNIX环境高级编程》读书笔记之文件与目录(2)
- HDU-1548 A strange lift
- [解决]Xcode6模拟器虚拟键盘不显示
- Web 应用层分类和识别
- typedef和#define