Cocos2dx 3.0 实战之—— 重写《超级马里奥》其七 加载界面的最
发布时间:2020-12-14 19:52:23 所属栏目:百科 来源:网络整理
导读:啥也不说了,这节的内容其实是在上节的基础上改的,直接上最终的源码。 LoadScene.h /** * Loadding场景的声明 */#ifndef __LOAD_SCENE_H__#define __LOAD_SCENE_H__#include "cocos2d.h"USING_NS_CC;/** * 定义一个LoadLayer类继承自Layer类 */class LoadLa
|
啥也不说了,这节的内容其实是在上节的基础上改的,直接上最终的源码。 LoadScene.h
/**
* Loadding场景的声明
*/
#ifndef __LOAD_SCENE_H__
#define __LOAD_SCENE_H__
#include "cocos2d.h"
USING_NS_CC;
/**
* 定义一个LoadLayer类继承自Layer类
*/
class LoadLayer : public Layer
{
public:
/**
* 构造函数
*/
LoadLayer();
/**
* 析构函数
*/
virtual ~LoadLayer();
/**
* 创建当前场景并加入LoadLayer层
*/
static Scene* createScene();
/**
* 初始化LoadLayer层
*/
virtual bool init();
/**
* 创建LoadLayer层
*/
CREATE_FUNC(LoadLayer);
/**
* 加载完成的返回函数
*/
void LoadingCallback(Ref* pSender);
/**
* 预加载音乐资源
*/
void preloadMusic();
/**
* 加载图片资源
*/
void loadImage();
private:
/**
* 记录进度条的当前值
*/
int currentNumber;
/**
* 总资源数
*/
int totalNumber;
/**
* 加载状态的资源
*/
ProgressTimer *loadBar_loading;
};
#endif
LoadScene.cpp /**
* Loadding场景的实现
*/
#include "LoadScene.h"
#include "VisibleRect.h"
#include "SimpleAudioEngine.h"
using namespace CocosDenshion;
#define TOTAL_PIC_NUM 1 //图片资源数
/**
* 构造函数,一般用来初始化变量
*/
LoadLayer::LoadLayer() : currentNumber(0),totalNumber(TOTAL_PIC_NUM){}
/**
* 析构函数,一般用来释放内存
*/
LoadLayer::~LoadLayer(){}
/**
* 创建场景,加入LoadLayer层
*/
Scene* LoadLayer::createScene()
{
Scene* scene = Scene::create();
LoadLayer *layer = LoadLayer::create();
scene->addChild(layer);
return scene;
}
/**
* 初始化 LoadLayer
*/
bool LoadLayer::init()
{
if (!Layer::init())
{
return false;
}
//加载资源
SpriteFrameCache *frameCache = SpriteFrameCache::getInstance();
frameCache->addSpriteFramesWithFile("imageResource.plist","imageResource.png");
//加入背景页
Sprite *bg = Sprite::createWithSpriteFrameName("loading_bg.png");
bg->setPosition(VisibleRect::center());
this->addChild(bg,10);
//加入加载中正常状态的精灵
Sprite *loadBar_nomal = Sprite::createWithSpriteFrameName("loading_normal.png");
loadBar_nomal->setPosition(VisibleRect::center());
this->addChild(loadBar_nomal,11);
//加入进度条
loadBar_loading = ProgressTimer::create(Sprite::createWithSpriteFrameName("loading_loading.png"));
//初始百分比
loadBar_loading->setPercentage(0.0f);
//坐标位置,一般是与上面的正常状态的位置一样的
loadBar_loading->setPosition(VisibleRect::center());
//设置类型为BAR
loadBar_loading->setType(ProgressTimer::Type::BAR);
//setBarChangeRate方法用来设置进度条变化方向的,如果不用变化的方向,则设置该方向为0,否则设置为1。所以(1,0)表示横方向,(0,1)表示纵方向。
loadBar_loading->setBarChangeRate(Point(0,1));
//setMidpoint方法设置进度条的起始点,(0,y)表示最左边,(1,y)表示最右边,(x,1)表示最上面,(x,0)表示最下面。
loadBar_loading->setMidpoint(Point(1,0));
//把loadBar_loading加入到场景中
this->addChild(loadBar_loading,12);
//预加载音乐
this->preloadMusic();
//加载图片资源
this->loadImage();
return true;
}
/**
* 进度条控制
*/
void LoadLayer::LoadingCallback(Ref* pSender)
{
++currentNumber;
int percent = (int)(((float)currentNumber / totalNumber) * 100);
ProgressTo *ptAction = ProgressTo::create(1.0f,percent);
loadBar_loading->runAction(ptAction);
if (currentNumber == totalNumber)
{
log("go to the next scene");
//加载完成去下一个场景
}
}
/**
* 加载音乐资源
*/
void LoadLayer::preloadMusic(){
//因为项目中暂时没有加入音乐资源,所以这里先空着,后续有音乐资源就一下面这张形式预加载音乐资源
//SimpleAudioEngine::getInstance()->preloadBackgroundMusic("音乐.mp3");
}
/**
* 加载图片资源
*/
void LoadLayer::loadImage(){
auto TexureCache = Director::getInstance()->getTextureCache();
TexureCache->addImageAsync("imageResource.png",CC_CALLBACK_1(LoadLayer::LoadingCallback,this));
//如果有第二条,第三条类似上面的语句,如:添加了image.png
//TexureCache->addImageAsync("image.png",this));
}
这个加载界面的基本格式和效果基本就是这样,值得说明的是我的资源图片只有一张,而音频文件暂时没有加入,而且我也还没有写第二个界面,这里为了看效果就先省略了,现在看看运行的效果
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
