载入场景的目的是预加载资源,也就是在场景进入时,把资源加载到内存中:
// 重写onEnter方法,场景载入时,会调用此方法,此外我们还需要调一下父类的方法,这个是API说明的,照做就行。// 方法其实功能是很简单的,就是先显示一张splash图片,然后异步加载图片资源,这个addImageAsync方法是引擎内部提供的API,可异步加载,这样就不会阻塞主线程了。voID LoadingScene::onEnter() { Layer::onEnter(); // Add the splash screen image auto background = Sprite::create("splash.png"); auto size = Director::getInstance()->getVisibleSize(); auto origin = Director::getInstance()->getVisibleOrigin(); background->setposition(origin.x + size.wIDth / 2,origin.y + size.height / 2); this->addChild(background); // Start to load texture async auto texture = Director::getInstance()->getTextureCache(); texture->addImageAsync("atlas.png",CC_CALLBACK_1(LoadingScene::onLoadFinishedCallback,this));}
加载完成后,就是加载音频文件,这里是同步加载的,如果资源很多的话,会卡的。加载完成后,就进入到WelcomeScene了。
voID LoadingScene::onLoadFinishedCallback(cocos2d::Texture2D *texture) { // Load the atlas AtlasLoader::getInstance()->loadAtlas("atlas.txt",texture); // Preload effect music. // Here is not the best way to load all music files, // in real projects,you should find a better way to do. CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect("sfx_dIE.ogg"); CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect("sfx_hit.ogg"); CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect("sfx_point.ogg"); CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect("sfx_swooshing.ogg"); CocosDenshion::SimpleAudioEngine::getInstance()->preloadEffect("sfx_wing.ogg"); // Now the task of the loading scene has finished, // auto enter into the welcome scene auto scene = TransitionFade::create(1.0f,WelcomeScene::createScene()); Director::getInstance()->replaceScene(scene);}
下一步:说说欢迎场景
总结以上是内存溢出为你收集整理的cocos2dx3.3开发FlappyBird总结八:载入场景LoadingScene全部内容,希望文章能够帮你解决cocos2dx3.3开发FlappyBird总结八:载入场景LoadingScene所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)