cocos2dx缓存
Ⅰ 娓告垙寮鍙戦渶瑕佸︿粈涔堬纻
瀛︿範娓告垙寮鍙戦渶瑕佺啛缁冩帉鎻℃父鎴忕紪杈戣蒋浠讹纴镡熺粌鎺屾彙濂借繖浜涘熀纭镄勬父鎴忚蒋浠跺姛鑳藉氨鍙浠ヤ简銆
甯哥敤镄勭紪杈戣蒋浠舵湁浠ヤ笅6绉嶃
1銆3dsMAX锛氩ぇ澶氭暟娓告垙寮鍙戝叕鍙哥编宸ヤ娇鐢锛屾晥鐜囱缉楂桡纴鍙浠ョ嫭绔嫔埗浣沧父鎴忎腑镓链夌编链鐩稿叧璧勬簮銆
2銆丮AYA锛氲窡3dsMAX宸涓嶅氱殑杞浠讹纴锲犱釜浜哄枩濂借屽畾锛孧AYA鍦ㄥ埗浣滃姩浣灭殑鏂归溃杈僊AX绋嶅樊锛屼笉杩囧湪寰埚氭柟闱㈣繖涓ゆ捐蒋浠堕兘鏄鍙浠ュ吋瀹圭殑銆
3銆丏eeppaint3D:鍙浠ョ洿鎺ユ墦寮3缁存ā鍨嬫枃浠讹纴鍦ㄤ笂闱㈢粯鍒惰创锲俱
4銆丆++锛氱▼搴忎娇鐢锛岀敤𨱒ュ疄鐜版父鎴忎腑镄勫悇绉嶅姛鑳斤纴璋冭瘯BUG绛夈
5銆丳hotoshop涓嶱anter锛氶厤钖圡AX鎴朚AYA𨱒ョ粯鍒跺悇绉嶆ā鍨嬮渶瑕佺敤镄勮创锲俱
6銆乑Brush锛氱编宸ュ埗浣滆秴楂樻ā鐢ㄧ殑锛岀劧钖庡彲浠ョ敓鎴愭硶绾胯创锲撅纴鍦∕AYA鎴朚AX涓浣跨敤銆
Ⅱ cocos2d texturecache 怎么管理内存
1. 介绍
纹理缓存是将纹理缓存起来,之后的绘制工作就能减少内存。每一个缓存图像的大小,颜色和区域范围都是可以被修改的。这些信息都是存储在内存中,不用在每一次绘制的时候都发送给GPU。
2. CCTextureCache
Cocos2d通过调用CCTextureCache或者CCSpriteFrameCache来缓存精灵的纹理。
当这个精灵调用CCTextureCache 或 CCSpriteFrameCache的方法的时候,cocos2dx将使用纹理缓存来创建一个CCSprite。所以你可以预先将纹理加载到缓存中,这样你在场景中使用的时候就非常方便了。怎么样加载这些纹理就看你自己的想法。例如,你可以选择异步加载方式,这样你就可以为loading场景增加一个进度条。
当你创建一个精灵,你一般会使用CCSprite::create(pszFileName)。假如你去看CCSprite::create(pszFileName)的实现方式,你将看到它将这个图片增加到纹理缓存中去了:
bool CCSprite::initWithFile(const char *pszFilename)
{
CCAssert(pszFilename != NULL, "Invalid filename for sprite");
CCTexture2D *pTexture = CCTextureCache::sharedTextureCache()->addImage(pszFilename);
if (pTexture)
{
CCRect rect = CCRectZero;
rect.size = pTexture->getContentSize();
return initWithTexture(pTexture, rect);
}
// don't release here.
// when load texture failed, it's better to get a "transparent" sprite then a crashed program
// this->release();
returnfalse;
}
上面代码显示一个单例在控制加载纹理。一旦这个纹理被加载了,在下一时刻就会返回之前加载的纹理引用,并且减少加载的时候瞬间增加的内存。(详细API请看CCTextureCache API)
3. CCSpriteFrameCache
CCSpriteFrameCache单例是所有精灵帧的缓存。使用spritesheet和与之相关的xml文件,我们可以加载很多的精灵帧到缓存中,那么之后我们就可以从这个缓存中创建精灵对象了。
和这个xml相关的纹理集一般是一个很大的图片,里面包含了很多小的纹理。下面就是一个纹理集的例子:
有三种方式来加载纹理集到CCSpriteFrameCache中:
(1)加载一个xml(plist)文件
(2)加载一个xml(plist)文件和一个纹理集
(3)通过CCSpriteFrame和一个精灵帧的名字
具体完整API请看CCSpriteFrameCache API。
样例:
CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache();
cache->addSpriteFramesWithFile(“hello.plist”, “hello.png”);
使用缓存的原因就是减少内存,因为当你使用一个图片创建一个精灵的时候,如果这个图片不在缓存中,那么就会将他加载到缓存中,当你需要用相同的图片来新建精灵的时候,就可以直接从缓存中取得,而不用再去新分配一份内存空间。
4. CCSpriteFrameCache 对比 CCSpriteBachNode
(1) 最好是尽可能的使用spritesheets (CCSpriteBatchNodes)。这样的方式是减少draw的调用次数。Draw的调用是非常耗时的。每一个batchnode调用一次draw就可以绘制上面所有的节点,而不是每一个节点的draw都单独调用一次,
(2) CCSpriteBatchNode渲染所有的子节点只需要一次,只需要调用一次draw。那就是为什么你需要把精灵加载batch node的原因,因为可以统一一起渲染。但是只有这个精灵使用的纹理包含在batch node中的才可以添加到batch node上,因为batch node一次只渲染这相同的纹理集。
(3) 假如你把精灵添加到其他的节点上。那么每一个精灵就会调用自己的draw函数,batch node就没起作用了。
(4) CCSpriteBatchNode也是一个常用节点。你可以从场景中像其他节点一样移除掉。纹理集和精灵帧都被缓存在CCTextureCache 和 CCSpriteFrameCache单例中。假如你想要从内存中移除纹理集和精灵帧,那么你不得不通过缓存类来完成这个工作。
转载
Ⅲ cocos 性能优化方案求助
一.内存优化
1.内存泄漏
在最近的项目中使用了C11的智能指针,经过一年的使用证明这是不是一个成功的选择。虽然已经没了自己管理的烦躁,但是增加了内存泄漏的几率。毕竟不是所有人都能完全理解和掌握shared_ptr的使用。 建议使用cocos2dx自带的轻量级智能指针,采用了引用计数,并且没有了C11智能指针循环引用及其他使用容易导致引用计数异常的问题。
2.缓存(材质缓存,精灵帧缓存)管理
这里必须要引入过渡场景,用于removeunused的缓存,然后预加载下一个场景需要使用的资源。 并且cocos2dx提供了api可以查看内存中所有的缓存,做为开发必须能完全熟知内存中的这些缓存,能及时判断哪些材质是多余的。
这里要多提的一点是,不使用jpg,android使用pkm,ios使用pvr是非常有必要的。特别对于8000*8000超大地图。
3.高性能对象池
传统对象池只有一个list保存所有对象,每次使用循环遍历查找未使用的对象。
这里的优化是新增一个队列保存所有可使用的对象。每次对象使用完进行push_front的操作,每次使用通过pop_front获取。
二.CPU优化
1.近似数学函数
开方、三角函数近似替换算法,计算两点间的距离(曼哈顿距离、牛顿迭代或者使用平方数值做比较),位移运算(针对频繁的乘除2的n次幂)等。
2.算法
在算法的选择上其实渗透在我们的每一个即使非常小的功能模块,对于不是专门研究算法的我们,算法更多是一种意识。拒绝所有的时间复杂度O(n*n)的操作,永不高估CPU的计算性能,在现有的操作上力求更低的计算量。 然后有的放矢的去选择适合自己项目的算法。
3.分帧
分帧是比较坏的情况,因为这时候优化可能到了末尾。确实有一些cpu密集型的计算需要分帧甚至开线程来解决了。
PS:空间换时间。其实上面三条包括我的高性能的高斯模糊算法那篇文章,基本上对于cpu的优化核心都是空间换时间。
三.GPU优化(Drawcall优化)
1.超大图的切片
切片太小对于drawcall是非常有影响的,目前使用最大化切片2048*2048,并且图片使用压缩格式使用存在于缓存中。
2.合图(多摄像机场景)
对于摄像机比较多的场景,由于底层是遍历摄像机,每个摄像机执行一次场景的全部绘制。
所以在合图的时候需要按照摄像机来分层合图,不要把不同摄像机的图片合到一起。
做为开发要能够根据看到的场景预估drawcall数量,在判断出异常的时候分步优化层级drawcall数量。
Ⅳ cocos2dx的3d 怎么获取cc对象
cocos2dx的3d获取cc对象:通过对导演、场景、层和节点的剖析,现在我们已经可以写出一个完整的游戏体系了。
获取精灵的方法可以考虑将你的所有精灵加入到一个单例层里作为精灵管理层,加进去的时候定义好TAG值,方便随时随地可根据TAG值取到想要的精灵。
触摸坐标否在精灵上第一个思路是先获取你的sprite的boundingBox,和你触摸点坐标,判断触摸点坐标是否包含于sprite的区域内。
主要功能:
图形渲染:包括2D图片、文字、序列帧动画、骨骼动画、粒子、特效等渲染,在v3.3版本开始加入简单的3D模型渲染和3D动画。
音频功能:支持游戏内的音效和背景音乐播放控制。
资源管理:图片、音频和脚本资源的加载、缓存及释放。
物理模块:通过集成 2D 物理引擎 Box2D 和 Chipmunk、3D物理引擎 Bullet 以支持游戏的物理特性。
场景管理:通过场景、层、精灵三层主要结构,对游戏的场景树进行创建和销毁管理。
Ⅳ 游戏开发需要具备哪些技术
一个游戏问世要经历很多环节,剧本设计,原画创作,场景建模,但核心部分还是编程语言开发。和其他程序员一样,要想做一名优秀的游戏开发者,算法,数据结构,语言等基础一个都不能少。
主要学的内容如下:
1.游戏程序设计:C++程序设计入门;基本数据类型和输入输出;流程控制语句;数组、指针和引用、函数;程序结构和书写规;范结构体和联合体、类;继承与多态;异常处理与程序调试。
2.算法与数据结构:算法分析;数据结构;基本算法;STL的概念与使用;静态库与动态库;XML库的使用。
3.Win32程序设计:Windows程序入门;Windows消息;GDI绘图游戏工具与MFC;网络编程基础。
4.游戏数学和智能应用:游戏中的坐标系;矢量、矩阵;几何碰撞;物理模拟;人工智能与寻路算法。
5.2D游戏技术与应用:2D游戏技术概论;游戏地图系统;GUI系统;战斗系统设计;任务系统;优秀的声音引擎BASS;Cocos2D-X引擎;Box2D物理引擎。
互联网行业目前还是最热门的行业之一,学习IT技能之后足够优秀是有机会进入腾讯、阿里、网易等互联网大厂高薪就业的,发展前景非常好,普通人也可以学习。
想要系统学习,你可以考察对比一下开设有相关专业的热门学校,好的学校拥有根据当下企业需求自主研发课程的能力,能够在校期间取得大专或本科学历,中博软件学院、南京课工场、南京北大青鸟等开设相关专业的学校都是不错的,建议实地考察对比一下。
祝你学有所成,望采纳。
Ⅵ mt管理器怎么修改游戏
这里拿“虐心火柴人”游戏为例,你需要MT管理器二代、你手机自带的备份与恢复和一个解压缩的软件 ZAchiver。
(6)cocos2dx缓存扩展阅读:
MT管理器是一款文件管理器软件,作为文件管理软件功能比较全面。 延用JAVA平台的双窗口操作模式,便捷的九宫格菜单操作。
支持对文件名及文件内容、大小进行搜索 显示apk图标、图片缩略图,支持缩略图缓存、显示ZIP内图片缩略图。