首页 > 代码库 > cocos2dX 番外篇之CCSpriteBatchNode
cocos2dX 番外篇之CCSpriteBatchNode
嗯, 今天我们没事干, 闲的蛋疼, 干脆我们创建精灵玩玩吧, 我随手一打, 我去, 出了一万个精灵, 感觉我就是万能的上帝啊, 一万个( 旁白: 请不要放弃治疗好么), 嘿嘿, 看看一万个精灵是啥样:
看起来很不错啊( 旁白: 等等, 那个帧数怎么下降这么多啊), 额, 竟然被妹纸看出来了, 好吧, 我们进入今天的课程CCSpriteBatchNode
在游戏的某一时刻, 我们可能会大量的绘制某一个精灵( 比如发出的子弹, 搜集的星星之类), 我们都是使用同一张纹理图片创建的, 如果一张一张的进行渲染, 这个效率我就只能呵呵了, 所以帧数不可避免的就降低了, 而且每一次都会将图像纹理加载到内存( 对于加载到内存, 有朋友说可以直接在计数的时候+1, 可以保证不被释放, 这是个不错的主意, 但是我们今天主要是讲CCSpriteBatchNode, 这个会留到最后的"高级篇"里面讲解), 在游戏中最直观的效果就是卡顿, 为了解决这个问题, cocos2dX为我们引进了CCSpriteBatchNode, 我们就来看看CCSpriteBatchNode有什么神奇的地方吧
对了, 关于左下角的三行数字我解释一下:
第一行: 当前场景的渲染批次, 简单的可以理解为当前场景绘制了多少个精灵
第二行: 渲染每一帧消耗的时间
第三行: FPS, 每秒绘制的帧数
渲染批次越小, 游戏越流畅, FPS越小, 游戏越卡顿
可以在AppDelegate.cpp里面设置显示/隐藏
测试的时候都建议打开, 发布时候隐藏就行
先看看用法:
CCSpriteBatchNode* batchNode = CCSpriteBatchNode::create( 图片文件, 默认子节点数);
撸个代码先:
//创建批次渲染对象, 并添加到当前图层 CCSpriteBatchNode* batchNode = CCSpriteBatchNode::create( "CloseSelected.png", 10000); addChild( batchNode); for ( int i = 0; i < 10000; ++i) { CCSprite* sprite = CCSprite::createWithTexture( batchNode->getTexture()); //从CCSPriteBatchNode里面获取纹理用来创建精灵 sprite->setPosition( ccp( CCRANDOM_0_1() * 480, CCRANDOM_0_1() * 320)); //取随机坐标CCRANDOM_0_1代表随机生成0~1之间的数字 batchNode->addChild( sprite); //添加到CCSpriteBatchNode }
看看, 我们是不是指渲染了一个对象, 帧率也跑起来了, 游戏也不卡了, 吃嘛嘛香, 身体倍棒( 旁白: 你今天是不是抽风了啊)
嗯, 这个, 今天的就讲完了, 不过还有几点要注意:
CCSpriteBatchNode在创建的时候默认的子节点数是29, 但是数量不够的时候会自己增加
使用CCSpriteBatchNode的时候只能使用同一张纹理贴图
使用CCSpriteBatchNode的时候不能指定zOrder, 就是不能指定谁在前谁在后
嗯, 今天貌似还真的完了, 大家有疑问/心得多在群里交流: 223856254