以超级玛丽为例:
资源加载进度条CCProgressTimer
用法如下:
CCSprite *spr = CCSprite::create("sliderProgress.png");
CCProgressTimer *timer = CCProgressTimer::create(spr);
addChild(timer);
timer->setPosition(ccp(winSize.width/2, winSize.height/2));
//默认为扇形的,这里设置为进度为条形。
timer->setType(kCCProgressTimerTypeBar);
//x 和y 均为[0,1]的数值表示,表示进度起始点。比如ccp(0,0)左下角,ccp(1,1)右上角。
timer->setMidpoint(ccp(0, 0.5));
//x 和y 均为[0,1]的数值表示,表示水平方向和坚直方向的进度。比如ccp(0,1)表示只有y 轴方向有进度。
timer->setBarChangeRate(ccp(1, 0));
//设置显示的百分比,实际用法可加载一个文件百分比加一,这样达到目的。
timer->setPercentage(100);
因为超级玛丽用的资源比较多,最好加一个进度条
1:实际比如加载一个图片让百分比前进一点,这样的话会显得比较土,最好封装个进度条类:
class ProgresssBar:public CCLayer
因为进度条后面添加背景好看些,否则一片漆黑,所以最好继承自CClayer:
2:先计算出总共要加载的图片和音乐数量
_bar->setPercentage((i + 1) * 100.0f / totalfile));
3:异步加载 addImageAsync
异步加载:我告诉你一个事,但我不等你做完,我继续往后做自己的事情,你做完了通知我。
for (int i = 0; i < _totalfile; ++i)
{
CCTextureCache::sharedTextureCache()->addImageAsync(picfiles[i], this, callfuncO_selector(LayerGame::loadImageCallBack));
}
注意addImage ---->addImageAsync 百度查一下这个异步加载函数。
异步加载的回调函数loadImageCallBack里:
a:设置进度(即setPercentage)
b:去判断如果检查加载的文件等于总的文件(其实也可以启用一个定时器去检查):
1:删去bar
2:真正的开始游戏:
加载地图
异步加载流程图: