啥也不说了,这节的内容其实是在上节的基础上改的,直接上最终的源码。
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)); }
这个加载界面的基本格式和效果基本就是这样,值得说明的是我的资源图片只有一张,而音频文件暂时没有加入,而且我也还没有写第二个界面,这里为了看效果就先省略了,现在看看运行的效果
原文链接:https://www.f2er.com/cocos2dx/345339.html