我想知道如何优化CCSpriteBatchNode的使用。 换句话说,我认识到:
- 1)每个CCSpriteBatchNode实例执行一个呼叫到绘制方法,从而减少OpenGL调用且因此显著性能改进的
- 2)每个CCSpriteBatchNode可以指一个且仅纹理地图
什么我不是100%肯定,我想你的答案是:
3)如果我有一个纹理图集,如游戏,艺术hd.png,并创建各种类,我将获取多个绘图调用几个CCSpriteBatchNode? 换句话说,我假定CCSpriteBatchNode的每个实例将调用它自己的拉伸方法,导致多个GL绘图呼叫和比具有一个共享节点批量性能以下。 我对吗?
- 4)如果我使用一个Sprite由多个帧的动画,我想我应该动画帧添加到雪碧批次节点。 我该怎么办呢?
下面有我如何正常动画精灵的代码片断。 正如可以注意到的子画面帧不加入到子画面批次节点。 为了获得更好的性能也许我应该这样做在初始化时。 它是否正确?
NSMutableArray* frames = [[NSMutableArray alloc]initWithCapacity:2]; for (int i = 0; i < 4; i++) { NSString*bulletFrame = [NSString stringWithFormat:@"animation-%i.png", i]; CCSpriteFrame* frame = [[CCSpriteFrameCache sharedSpriteFrameCache]spriteFrameByName:bulletFrame]; [frames addObject:frame]; } CCAnimation* anim = [CCAnimation animationWithFrames:frames delay:0.1f]; CCAnimate* animate = [CCAnimate actionWithAnimation:anim]; CCRepeatForever* repeat = [CCRepeatForever actionWithAction:animate]; [self runAction:repeat]; }
5)部分指的4.你确认是希望避免增加并在运行时移除精灵的精灵一批节点?
6)将CCSpriteBatchNode只考虑有肉眼可见设置为true或具有位置,实际上是画面区外精灵的精灵?
3其他注意事项
为了解决3.我的假设,并减少CCSpriteBatchNode实例的数量,我的解决方案将遵循什么在这个建议的@Suboptimus 答案 。 我喜欢初始化希望与MainScene类共享同一批次的节点,而不是让他们通过self.parent.parent访问MainScene类的建议的方法。(...)。parent.finallysharedbatchNode
其他人反而会建议使用通过..... self.parent父母和正确的浇铸成指MainScene。
这是最好的办法也是在软件工程方面 ?
我喜欢并明确其中的精灵通过使用一个明确的参考MainScene类..如果我的团队,或者如果我更改类层次结构在工作这应该有助于增加。 但是,这种方法的缺点是,我“需要”的引用存储它,如果我想补充随后精灵到一批节点,从而导致更多的代码维护。
我问这个问题的原因是,如果找到我的传统的“软件工程”思想和“cocos2d的父节点”层级方法之间的轻微碰撞。 我是新来的游戏编程,我想了解哪一种方法是,经历了大团队中工作使用:)游戏开发商之一。 H