首页 > 代码库 > coco2d-x实现Loading界面预加载资源

coco2d-x实现Loading界面预加载资源

首先我们定义2个c++文件,一个是loadingScene.h, loadingScene.cpp

首先我们在.h里面我们定义我们的办法

#include"cocos2d.h"

using namespace cocos2d;

class loadingScene:public Layer

{

public:

int nuberOfLoadedRes;//记录当前的进度

CREATE_FUNC(loadingScene);

bool init();

static Scene *createScene();

void loadingResource();//加载资源

void loadingCallBack(Texture2D*obj);//加载资源的回调

void update(float t);

};

定义好了.H,然后我们去实现这些方法

在.CPP里面。因为我的资源是从cocostudio里面制作的

所以我们这里就实现怎么把cocostudio制作的东西拿到cocos2d里怎么来用他

#include"loadingScene.h

#include"cocostudio/cocostudio.h"

#include"SimpleAudioEngie.h"  //这里是定义声音的头文件

using namespace CocosDenshion //这里是定义声音的头文件

using namespace cocostudio;

Scene *loadingScene::createScene()

{

   auto scene=Scene::create();

   auto layer=loadingScene::create();

   scene->addChild(layer);

   return scene; 

}


bool loadingScene::init()

{

if(!Layer::init())

{

return false;

}

//显示场景编辑器做好的场景

auto node=SceneReader::getInstance()->createNodeWithSceneFile("

publish/LoadingScene.json //要加载场景

")

node->setTag(1000);

this->addChild(node);

//先设置进度条

Node *nodeScene=this->getChildByTag(1000);//场景根节点

comRender *render=(comRender*)(nodeScene->getChildByTag(10003))->getComponent("GUIComponent"));

Widget *widget=(cocos2d::ui::Widget*)(render->getNode());//得到UI层的根节点

loading *progressBar=(loadingBar*)(widget->getChildByTag(7));

progressBar->setPercent(0);

下面我们需要去实现在.H里面的加载资源的方法 ,然后我们在init()方法里面实现一下

//实现资源的加载

this->numberOfLoadedRes=0;//先初始化我们要加载的资源为0

loadingScene::LoadingResource();

this->scheduleUpdate();

return true;


}

void  LoadingScene::LoadingResource()

{

 SimpleAudioEngine::getInstance()->preloadBackgroundMusic(FileUtils::getInstance->

fullPathForFilenmae("需要加入的游戏音乐的名字".c_str());

numberOfLoadedRes++;

//加载所有的图片帧

spriteFrameCache::getInstance()->addSpriteFramesWithFile("加入plist文件");

numberOfLoadedRes++;

//  纹理缓存--所有的图片都可以放到纹理缓存中

Director::getInstance()->getTextureCache()->addImageAsync("需要加入的图片",

CC_CALLBACK_1(loadingScene::loadingCallBack,this));

}

//加载资源的回调

void loadingScene::LoadingCallBack(Texture2D * obj)

{

numberOfLoadedRes++

这里我们用log打出我们加载的资源有没有成功

log("资源加载:%d",numberOfLoadedRes);


}

这里我们更新下我们的进度条

void loadingScene::update(float t)

{

float percent=(float)numberOfLoadedRes/(有多少资源)*100;

Node *nodeScene=this->getChildByTag(1000);//场景的根节点

ComRender * render=(ComRender*)(nodeScene->getChildByTag(10003)->

               getComponent("GUIComponent"));

Widget *widget=(cocos2d::ui::Widget*)(render->getNode());

loadingBar *progressBar=(LoadingBar*)(widget->getChildByTag(7));

progressBar->setPercent(percent);

if(numberOfLoadedRes==(有多少资源))

{

  这里就写你下载资源之后是跳转场景呢还是干什么

}

}

忘记了告诉大家,上面那些Tag里面的数字,要是代码里面没有setTag的,那些Tag都cocostudio里面对象物体的标签 。









coco2d-x实现Loading界面预加载资源