cocos2d-x学习笔记-SpriteBatchNode的优化原理

来源:互联网 发布:淘宝店保证金能退吗 编辑:程序博客网 时间:2024/05/29 19:31

    要相对cocos2d-x有一个全面的理解,学习opengl是必须的事情,当然了,对我们这些做上层游戏的,对opengl有一个大概的,比较清楚地理解就可以了!

    今天,我把我对SpriteBatchNode的理解说出来,如果感觉那里不对,希望指点!

    我们都知道SpriteBatchNode是用于批处理,可以提高渲染效果!但是为什么可以?有什么限制?

    1. 我们先回答第一个问题:  为什么可以?

    cocos2dx中的绘画,是通过Node节点的visit方法开始,

             一般的节点,会调用自己的draw方法,然后依次调用子节点的draw方法,我这里先不考虑绘画的顺序!而在每一个节点的draw方法中!我们可以通过观察Sprite的draw方法,可以发现,每一次的draw的调用,就会使得opengl重新绑定纹理,指定各种顶点坐标,纹理坐标,颜色等等,最后进行绘画,当然了这里的数据只是该Sprite的数据。

             对于SpriteBatchNode,通过观察它的addChild方法以及draw方法,就会发现,其实现快速渲染的本质,其实就是,把所有的孩子节点(包括孩子节点的孩子),所有的数据都放在一起,再draw中,进行一起绘画!即一次渲染!从而达到快速渲染的目的!

     2. 第二个问题:有什么限制?

           首先,从opengl角度来说,切换纹理是很耗时的动作!  其实,从SpriteBatchNode实现来说,必须要求同一张纹理,即必须是同一张图片!甚至要求他的孩子节点的孩子节点也必须是一张纹理!

          其实,再从SpriteBatchNode角度发现,它要求他的孩子必须是Sprite!

 

      上面是我对SpriteBatchNode的理解!希望各位大神发现不对的地方,给我指出来!谢谢啊!

0 0
原创粉丝点击