cocos2d-x ios游戏开发初认识(六) 渲染的优化
做程序开发肯定要考虑到内存的优化,毕竟iphone本身的内存就不是非常大。这一节主要说这个cocos2d开发对内存的优化,详细表如今,既能够对同样的精灵(图片)仅仅渲染一次,也能够对不能的精灵仅仅渲染一次。
以下是程序的做法,先屏蔽前面的代码。
先简介一下 CCSpriteBatchNode类,它是用来优化游戏渲染效率的。CCSpriteBatchNode
中的全部CCSprite仅仅会被渲染1次,因此能够提高游戏的FPS。限制:增加到CCSpriteBatchNode
中的CCSprite必须使用同一张纹理图。
详细代码
CCSpriteBatchNode *node =CCSpriteBatchNode::create("Peashooter1.tiff");//先渲染文件
this->addChild(node);
CCSprite *plant = CCSprite::create("Peashooter1.tiff"); //创建精灵
plant->setPosition(,));
node->addChild(plant); //加入到
node中
执行:
能够看到 加入一个精灵 此时的FPS为1。以下再加入一个文件同样精灵:
CCSpriteBatchNode *node =CCSpriteBatchNode::create("Peashooter1.tiff");//先渲染文件
this->addChild(node);
CCSprite *plant =
CCSprite::create("Peashooter1.tiff"); //创建精灵
plant->,));
node->addChild(plant); //加入到 node中
//再创建一个精灵
CCSprite *plant1 =
CCSprite::create("Peashooter1.tiff"); //创建精灵
plant1->,));
node->addChild(plant1);
return
true;
执行:
能够看到两个精灵都被创建出来了,可是FPS还是为1。这就是CCSpriteBatchNode的作用,它保证加入到类里面全部同样文件的精灵仅仅被渲染一次。
既然同样的精灵能够仅仅渲染。那么不同的文件的精灵可不能够仅仅被渲染一次,答案是能够的。看以下的做法。
这时要用到第(五)篇文章讲的内容。详细做法是我们能够先把非常多种不同的图片合成一张大图,然后将这张大图加入到CCSpriteBatchNode中。这时渲染大图里面的小图都会仅仅被渲染一次,看详细程序做法:
///*假设想让不同图片仅仅渲染一次得要用到帧缓存机制渲染多个不同的图片 */
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("Person.plist"); //先缓存大图
CCSpriteBatchNode *node1 =CCSpriteBatchNode::create("Person.png");//渲染到一个大图片
this->addChild(node1);
CCSpriteFrame *frame =CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("本.png");
CCSprite *plant3 =CCSprite::createWithSpriteFrame(frame);
plant3->,));
node1->addChild(plant3);
CCSpriteFrame *frame1 =CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("登.png");
CCSprite *plant4 =CCSprite::createWithSpriteFrame(frame1);
plant4->,));
node1->addChild(plant4);
这个大图 全部小图片的名字:
执行:
我们能够看到又添加了两张图片。并且这两张图片不是一样的,可是FPS还是为2仅仅加了1,表示新添加的两个精灵仅仅被渲染了一次,如今我们发现帧缓存机制
是很强大的,在游戏开发中经经常使用到。
cocos2d-x ios游戏开发初认识(六) 渲染的优化的更多相关文章
- cocos2d-x ios游戏开发初认识(九) 音效、粒子系统与存储
我们知道.一个游戏少不了声音.一些好听的声音会提起你对游戏的兴趣,当然做好听的声音不是我们要学的,我们的目的是把声音在适当的时候放出来.顺便在这节中会说下简单的粒子系统和文件存储. 一.声音的播放: ...
- cocos2d-x ios游戏开发初认识(八) 触摸事件与碰撞检測
玩过植物大战僵尸都知道,要在草坪里放一朵向日葵或者其他的植物仅仅需触摸那个植物将其拖入到想要摆放的位置,这事实上就是这节要写的触摸事件.还能够发现当我们的僵尸出来的时候,我们的小豌豆会发子弹攻击僵尸, ...
- cocos2d-x ios游戏开发初认识(五) CCsprite精灵类
这次写一下精灵创建的几种类型: 一.通过文件创建: 在原有的基础上加入例如以下代码: //一.通过文件创建精灵 CCSprite *bg =CCSprite::create("map.png ...
- 【Cocos2D研究院之游戏开发】
http://www.xuanyusong.com/archives/category/ios/cocos2d_game 分类目录归档:[Cocos2D研究院之游戏开发] 201211-19 Co ...
- 开发者经验谈:如何一天时间搞定iOS游戏开发?
开发者经验谈:如何一天时间搞定iOS游戏开发? 在一天时间里将完成iPhone游戏开发由梦想变为现实? 本文作者给出了从创意转变成现实的详细答案.使用苹果原生游戏引擎SpriteKit,遵循一定的原则 ...
- 《MFC游戏开发》笔记六 图像双缓冲技术:实现一个流畅的动画
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9334121 作者:七十一雾央 新浪微博:http:/ ...
- iOS 11开发教程(六)iOS11Main.storyboard文件编辑界面
iOS 11开发教程(六)iOS11Main.storyboard文件编辑界面 在1.2.2小节中提到过编辑界面(Interface builder),编辑界面是用来设计用户界面的,单击打开Main. ...
- ios游戏开发 Sprite Kit教程:初学者 1
注:本文译自Sprite Kit Tutorial for Beginners 目录 Sprite Kit的优点和缺点 Sprite Kit vs Cocos2D-iPhone vs Cocos2D- ...
- 【Visual C++】游戏开发五十六 浅墨DirectX教程二十三 打造游戏GUI界面(一)
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/16384009 作者:毛星云 ...
随机推荐
- POJ2175:Evacuation Plan(消负圈)
Evacuation Plan Time Limit: 1000MSMemory Limit: 65536KTotal Submissions: 5665Accepted: 1481Special J ...
- 转:Android Context的理解
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40481055,本文出自:[张鸿洋的博客] 本文大多数内容翻译自:http://w ...
- hdu 6119 …&&百度之星 T6
小小粉丝度度熊 Problem Description 度度熊喜欢着喵哈哈村的大明星——星星小姐. 为什么度度熊会喜欢星星小姐呢? 首先星星小姐笑起来非常动人,其次星星小姐唱歌也非常好听. 但这都不是 ...
- (转)vim 常用快捷键 二
转自:http://www.cnblogs.com/wangkangluo1/archive/2012/04/12/2444952.html 键盘移动 (Move) 一切都从键盘的移动 k -> ...
- Grep查看日志的方法【转】
转自:http://blog.csdn.net/stormkey/article/details/5905204 版权声明 :转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://go ...
- (七)insmod/rmmod
insmod: insmod命令用于将给定的模块加载到内核中.Linux有许多功能是通过模块的方式,在需要时才载入kernel.如此可使kernel较为精简,进而提高效率,以及保有较大的弹性.这类可载 ...
- 判断dataset是否被修改—DataSet.HasChanges 方法
DataSet.HasChanges 方法 获取一个值,该值指示 DataSet 是否有更改,包括新增行.已删除的行或已修改的行. 命名空间: System.Data程序集: System.Da ...
- css伪类元素:after 的多功能用法——任意大小的底边框
需求用法出现的背景: 由于项目UI的优化,项目中所有tab导航选中的状态都是统一样式书写的,之前都是用的border-bottom,新的需求如果用以前的本办法就是定位一个选中边框在底部,但是涉及的模板 ...
- object的hashCode与equals
JAVA代码: public static void main(String[] args) { Object obj1 = new Object(); Obj ...
- Python的功能模块[1] -> struct -> struct 在网络编程中的使用
struct模块 / struct Module 在网络编程中,利用 socket 进行通信时,常常会用到 struct 模块,在网络通信中,大多数传递的数据以二进制流(binary data)存在. ...