cocos2dx异步加载资源制作Loading界面

cocos2dx异步加载资源制作Loading界面,第1张

概述要实现题目中的需求,网上的做法一般是使用pthread开一个新线程,在里面加载,然后主线程来管理进度条。 但是由于cocos2dx本身并不推荐使用多线程 *** 作CCObject的retain(),release()和autorelease()方法,因为他的内存池不是线程安全的。 思考良久,我的做法是: 1,使用cocos2dx自带的addImageAsync()方法加载纹理(因为下一步要加载其它资源,

要实现题目中的需求,网上的做法一般是使用pthread开一个新线程,在里面加载,然后主线程来管理进度条。

但是由于cocos2dx本身并不推荐使用多线程 *** 作CCObject的retain(),release()和autorelease()方法,因为他的内存池不是线程安全的。

思考良久,我的做法是:

1,使用cocos2dx自带的addImageAsync()方法加载纹理(因为下一步要加载其它资源,而他们是需要纹理的,所以先加载纹理),并更新进度条

2,纹理加载完毕后,开始在主线程中使用定时器加载其它资源,如将资源加载到CCSpriteFrameCache或者CCAnimationCache中,同时更新进度条

3,要创建的对象们从cache中取得需要的资源


代码:

1,使用cocos2dx自带的addImageAsync()方法加载纹理(因为下一步要加载其它资源,而他们是需要纹理的,所以先加载纹理),并更新进度条

	CCTextureCache::sharedTextureCache()->addImageAsync(imgPath1.c_str(),this,callfuncO_selector(BattleLoading::cbLoadimg));	CCTextureCache::sharedTextureCache()->addImageAsync(imgPath2.c_str(),callfuncO_selector(BattleLoading::cbLoadimg));	CCTextureCache::sharedTextureCache()->addImageAsync(imgPath3.c_str(),callfuncO_selector(BattleLoading::cbLoadimg));

其中,cbLoadimg是加载纹理的回调函数:
voID BattleLoading::cbLoadimg(CCObject* sender){	numNowimg++;	float percent = numNowimg/(numTotalimg+numTotalAnim);	loadProgress->setPercentage(percent*barLength);//推动进度条	if (numNowimg==numTotalimg){		//如果纹理都加载完了,就启动计时器,每一帧都加载动画到动画缓存里,进入第二步		schedule(schedule_selector(BattleLoading::loadAnimUpdate));	}}


2,纹理加载完毕后,开始在主线程中使用定时器加载其它资源,如将资源加载到CCSpriteFrameCache或者CCAnimationCache中,同时更新进度条
voID BattleLoading::loadAnimUpdate(float dt){	addAnim(*mTotalit);	cbLoadAnim();//和上面的cbLoadimg()差不多	mTotalit++;//这里利用std::List的迭代器来让动画在每一帧被读取	if(mTotalit==mTotalList.end()) {		unschedule(schedule_selector(BattleLoading::loadAnimUpdate));//结束计时器		//读取完毕,进入战斗界面		fightStage* stage = fightStage::create();		CCScene* scene = CCScene::create();		scene->addChild(stage);		CCDirector::sharedDirector()->replaceScene(scene);		removeFromParent();	}}



3,要创建的对象们从cache中取得需要的资源

这一步实际上是战斗界面中的各种东西的创建,比如一个士兵,create的时候就可以从刚才存入缓存的资源中取得自己需要的东西。


遗留问题:经过测试,可以有效地缩短战斗界面的创建时间,在我机器上,每一个士兵的创建时间从平均70ms降到平均15ms,但是,这么做仍然不能解决创建精灵时分配内存空间所产生的程序停顿(就是那剩下的15毫秒)。请路过的大神指点。

总结

以上是内存溢出为你收集整理的cocos2dx异步加载资源制作Loading界面全部内容,希望文章能够帮你解决cocos2dx异步加载资源制作Loading界面所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1015790.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存