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(ccp(300,300));
node->addChild(plant); //加入到 node中
执行:
能够看到 加入一个精灵 此时的FPS为1。以下再加入一个文件同样精灵:
CCSpriteBatchNode *node =CCSpriteBatchNode::create("Peashooter1.tiff");//先渲染文件
this->addChild(node);
CCSprite *plant = CCSprite::create("Peashooter1.tiff"); //创建精灵
plant->setPosition(ccp(300,300));
node->addChild(plant); //加入到 node中
//再创建一个精灵
CCSprite *plant1 = CCSprite::create("Peashooter1.tiff"); //创建精灵
plant1->setPosition(ccp(400,400));
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->setPosition(ccp(200,200));
node1->addChild(plant3);
CCSpriteFrame *frame1 =CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("登.png");
CCSprite *plant4 =CCSprite::createWithSpriteFrame(frame1);
plant4->setPosition(ccp(500,500));
node1->addChild(plant4);
这个大图 全部小图片的名字:
执行:
我们能够看到又添加了两张图片。并且这两张图片不是一样的,可是FPS还是为2仅仅加了1,表示新添加的两个精灵仅仅被渲染了一次,如今我们发现帧缓存机制 是很强大的,在游戏开发中经经常使用到。
转载于:https://www.cnblogs.com/gccbuaa/p/6777279.html
cocos2d-x ios游戏开发初认识(六) 渲染的优化相关推荐
- WWDC15 iOS游戏开发3个新框架全解
简介 在此次WWDC的游戏相关视频中,苹果再一次展现了它非凡的技术整合和持续创新能力.除了继续完善已有的2D游戏框架SpritKit, 3D游戏框架SceneKit和全新的图形渲染API Metal ...
- 【269期门诊集锦】iOS游戏开发—2D游戏编程之我见
技术门诊是51CTO社区品牌栏目,每周邀请一位客座专家,为广大技术网友解答疑问.从热门技术到前沿知识,从技术答疑到职业规划.每期一个主题,站在最新最热的技术前沿为你引航! 本期门诊特邀iOS游戏开发专 ...
- iOS游戏开发 几个有利工具
2019独角兽企业重金招聘Python工程师标准>>> iOS游戏开发 几个有利工具 本文介绍的是iOS游戏开发 几个有利工具,为友们介绍几款开发工具,游戏爱好者记住了!先来看内容. ...
- iOS游戏开发到底难不难?
学好iOS游戏开发该怎么做?扣丁学堂分3个阶段来告诉大家该如何去做. 入门阶段 熟悉Objective-C这是必须的,语法比较简单,其实花不了多长时间.如果之前有其他编程语言的经验,在初次接触时会有比 ...
- iOS 11开发教程(六)iOS11Main.storyboard文件编辑界面
iOS 11开发教程(六)iOS11Main.storyboard文件编辑界面 在1.2.2小节中提到过编辑界面(Interface builder),编辑界面是用来设计用户界面的,单击打开Main. ...
- 《MFC游戏开发》笔记六 图像双缓冲技术:实现一个流畅的动画
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9334121 作者:七十一雾央 新浪微博:http:// ...
- iOS游戏开发:从创意到实现
<iOS游戏开发:从创意到实现> 基本信息 原书名:Tap,Move,Shake: Turning Your Game Ideas into iPhone & iPad Apps ...
- Unity和Cocos2D在2D游戏开发上的对比
游戏开发的最好技术是什么:Unity还是Cocos? 在网上你可以找到很多这两种技术的对比.在我们开发游戏之前,我们要了解相关数据和信息并决定使用那种技术.但是人们对这两种技术的对比大多都比较主观.擅 ...
- 【IOS游戏开发】 登陆以及支付SDK总结
这段时间已经负责做IOS的登陆和支付了 前期没有做过ios的项目 在其中遇到了很多问题 现在也是自己能够独立完成SDK的接入了 但是IOS相对比Android接入稍微简单点 但是后期的打包 还有签 ...
最新文章
- cpu线程_进程/线程上下文切换会用掉你多少CPU?
- selenium3 浏览器驱动下载及验证
- 模拟信号与数字信号之间的差异与比较—Vecloud微云
- html语言中的转行标记是6,网页设计与制作模拟试题
- Google Guava学习笔记——基础工具类Joiner的使用
- Codeforces Beta Round #11 B. Jumping Jack 思维
- 一款跑在云上的定制容器专属 OS 来了——LifseaOS | 龙蜥技术
- IBM 前面板显示信息提示
- c语言编写劫持dll,c语言-----劫持自己02
- C++ I/O流 格式控制(下)
- 理解有参构造器和无参构造器的作用
- [iCustomer] 项目技术简介
- 微信公众平台开发(四)——微信支付
- SQL 获取当前系统时间 以及对日期的加减处理
- 对booth算法的一点理解
- 阿里云acp认证, 阿里云acp考试介绍
- vue-cl 有一些静态资源不想经过webpack打包那么应该public 下面
- SDUST 实验+ 作业
- win10安装linux系统视频播放器,u盘安装linux视频mac制作win10安装u盘
- linux修改密码时候提示太简单了怎么办,linux修改密码
热门文章
- Python Django 打印执行过的查询语句
- Linux删除整行命令
- 【示例】Lucene创建索引库编程步骤
- 辽宁省计算机专业最好的本科学校有哪些,辽宁省哪所大学最好-辽宁省排名前十的大学排名...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(二)
- 【已解决】linux redhat 6 如何打开防火墙中的某个端口?例如:5900端口
- 强化学习note1——马尔科夫奖励过程MRP和马尔科夫决策过程MDP各个函数的定义与区别
- 最优化——单纯形法学习心得
- 强化学习1——策略,价值函数,模型
- 我这么讲线索二叉树,我三岁大的表弟笑了笑