加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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));
}

这个加载界面的基本格式和效果基本就是这样,值得说明的是我的资源图片只有一张,而音频文件暂时没有加入,而且我也还没有写第二个界面,这里为了看效果就先省略了,现在看看运行的效果

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读