Coco2dx 的缓存页面制作
2016-04-23 14:37
323 查看
相信有很多的Cocos2dx的初学者在制作游戏时会遇到场景中的资源加载过多的话就会引起游戏进入的时候很卡的问题,因为那是游戏在一边加载图片一边显示图片。为了解决这个问题,给玩家一个流畅的游戏体验,我们需要将我们的游戏资源在游戏的正式开始前就尽量多的加载到游戏缓存中,下面我们就了解一下如何将资源预先加载到游戏缓存中:
1.要将我们需要用到的资源打包。
所使用工具:TexturePacker
将图片打包成plist文件,好处是可以降低Cocos2d游戏渲染的次数,因为我们Cocos2d引擎渲染是根据图片的纹理来渲染的,如果两张图片的纹理一样,那么他只需要渲染一次,我们可以将多张不同的图片通过打包将他们的纹理改成一致,从而降低我们的游戏渲染次数,提高我们的游戏性能。
2.实现资源的异步加载。
资源异步加载的方法:(TextureCache类)
在这个类中有一个addImageAsync的方法。
void TextureCache::addImageAsync(const std::string &path,const std::function<void(Texture2D*)>&callback);
这个方法有两个参数,第一个参数是个path,也就是文件的地址,第二个参数是个funnction就是一个回调函数。
具体函数如下:
首先是头文件
Cpp文件
通过回调函数增加count,从而使资源文件依次加载...
1.要将我们需要用到的资源打包。
所使用工具:TexturePacker
将图片打包成plist文件,好处是可以降低Cocos2d游戏渲染的次数,因为我们Cocos2d引擎渲染是根据图片的纹理来渲染的,如果两张图片的纹理一样,那么他只需要渲染一次,我们可以将多张不同的图片通过打包将他们的纹理改成一致,从而降低我们的游戏渲染次数,提高我们的游戏性能。
2.实现资源的异步加载。
资源异步加载的方法:(TextureCache类)
在这个类中有一个addImageAsync的方法。
void TextureCache::addImageAsync(const std::string &path,const std::function<void(Texture2D*)>&callback);
这个方法有两个参数,第一个参数是个path,也就是文件的地址,第二个参数是个funnction就是一个回调函数。
具体函数如下:
首先是头文件
<pre name="code" class="cpp">/* * LoadingScene.h * * Created on: 2016年4月23日 * Author: Administrator */ #ifndef LOADINGSCENE_H_ #define LOADINGSCENE_H_ #include <cocos2d.h> #include <SimpleAudioEngine.h> #include "BeginScene.h" USING_NS_CC; class LoadingScene: public cocos2d::Layer { public: static cocos2d::Scene*createScene(); virtual bool init(); CREATE_FUNC(LoadingScene) ; private: Sprite *loadSprite; //场景切换 void nextScene(float dt); //加载图片资源 void loadingTextureCallBack(Texture2D*texture); //加载音频 void loadingAudio(); //清除缓存 void onExit(); //初始化用户数据 int _count; std::thread* _loadingAudioThread; }; #endif /* LOADINGSCENE_H_ */
Cpp文件
<pre name="code" class="html">/* * LoadingScene.cpp * * Created on: 2016年4月23日 * Author: Administrator */ #include "LoadingScene.h" #include "GlobalDefine.h" USING_NS_CC; using namespace CocosDenshion; Scene*LoadingScene::createScene() { auto scene = Scene::create(); auto layer = LoadingScene::create(); scene->addChild(layer); return scene; } bool LoadingScene::init() { if (!Layer::init()) { return false; } loadSprite = Sprite::create("Loading.png"); loadSprite->setPosition(Vec2(WINSIZE.width/2,WINSIZE.height/2)); auto rotate = RotateBy::create(1.0f, 360); loadSprite->runAction(RepeatForever::create(rotate)); this->addChild(loadSprite); _count = 0; // 图片和声音的异步加载 // 主界面 //开始页面资源 Director::getInstance()->getTextureCache()->addImageAsync( "LittleBeeUI/BeginLayer.png", CC_CALLBACK_1(LoadingScene::loadingTextureCallBack, this)); //通用资源 Director::getInstance()->getTextureCache()->addImageAsync( "LittleBeeUI/GeneralUI.png", CC_CALLBACK_1(LoadingScene::loadingTextureCallBack, this)); _loadingAudioThread = new std::thread(&LoadingScene::loadingAudio, this); return true; } void LoadingScene::loadingTextureCallBack(Texture2D * texture) { switch (_count++) { case 0: SpriteFrameCache::getInstance()->addSpriteFramesWithFile( "LittleBeeUI/BeginLayer.plist", texture); break; case 1: SpriteFrameCache::getInstance()->addSpriteFramesWithFile( "LittleBeeUI/GeneralUI.plist", texture); this->schedule(schedule_selector(LoadingScene::nextScene), 1, 1, 1); break; default: break; } } void LoadingScene::loadingAudio() { log("loadingAudio"); //初始化音乐 aduioEngine->preloadBackgroundMusic("Sound/Music_BG.mp3"); //初始化音效 aduioEngine->preloadEffect("Sound/Button.mp3"); } void LoadingScene::nextScene(float dt) { Director::getInstance()->replaceScene( TransitionFade::create(2.0f, BeginScene::createScene())); } void LoadingScene::onExit() { Layer::onExit(); _loadingAudioThread->join(); CC_SAFE_DELETE(_loadingAudioThread); this->unschedule(schedule_selector(LoadingScene::nextScene)); }
通过回调函数增加count,从而使资源文件依次加载...
相关文章推荐
- 按右键另存图片只能存BMP
- photoshop去除图片上的水印
- ruby实现的一个异步文件下载HttpServer实例
- C#异步绑定数据实现方法
- upload上传单张图片
- 图片引发的溢出危机(图)
- 科学知识:同步、异步、阻塞和非阻塞区别
- 探讨Ajax中同步与异步之间的区别
- 浅析SQL Server中的执行计划缓存(上)
- Enterprise Library for .NET Framework 2.0缓存使用实例
- C#实现把彩色图片灰度化代码分享
- PowerShell中编程清空IE缓存方法
- PowerShell中使用.NET将程序集加入全局程序集缓存
- C#将图片和字节流互相转换并显示到页面上
- C#监控文件夹并自动给图片文件打水印的方法
- 纯CSS实现的当鼠标移上图片添加阴影效果代码
- 如何使用C#从word文档中提取图片
- C#中异步回调函数用法实例
- C#实现打开画图的同时载入图片、最大化显示画图窗体的方法
- C#图片添加水印的实现代码