啥也不说了,这节的内容其实是在上节的基础上改的,直接上最终的源码。
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));}
这个加载界面的基本格式和效果基本就是这样,值得说明的是我的资源图片只有一张,而音频文件暂时没有加入,而且我也还没有写第二个界面,这里为了看效果就先省略了,现在看看运行的效果
总结
以上是内存溢出为你收集整理的Cocos2dx 3.0 实战之—— 重写《超级马里奥》其七 加载界面的最终效果全部内容,希望文章能够帮你解决Cocos2dx 3.0 实战之—— 重写《超级马里奥》其七 加载界面的最终效果所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)