Opengl es Cocos2d:CCSpriteBatch节点是否仅绘制visible属性设置为true的精灵?

Opengl es Cocos2d:CCSpriteBatch节点是否仅绘制visible属性设置为true的精灵?,opengl-es,cocos2d-iphone,sprite,spritebatch,Opengl Es,Cocos2d Iphone,Sprite,Spritebatch,CCSpriteBatch节点是否仅绘制visible属性设置为true的精灵 还是考虑屏幕大小?换句话说。如果节点内的精灵在屏幕外,opengl绘图调用的性能是否会反映这一点?否和否 CCSpriteBatchNode始终绘制所有子精灵。我不确定究竟是什么使得visible=NO的精灵不会出现在屏幕上,但从技术上讲,它每次都会绘制所有四边形。它也不考虑屏幕区域 未成批处理的精灵表现不同。如果未批处理的精灵不可见,则不会绘制它。但是,屏幕外的精灵会被绘制出来。Cocos2D没有跳过屏幕/窗口边界

CCSpriteBatch节点是否仅绘制visible属性设置为true的精灵

<>还是考虑屏幕大小?换句话说。如果节点内的精灵在屏幕外,opengl绘图调用的性能是否会反映这一点?

否和否

CCSpriteBatchNode始终绘制所有子精灵。我不确定究竟是什么使得visible=NO的精灵不会出现在屏幕上,但从技术上讲,它每次都会绘制所有四边形。它也不考虑屏幕区域

未成批处理的精灵表现不同。如果未批处理的精灵不可见,则不会绘制它。但是,屏幕外的精灵会被绘制出来。Cocos2D没有跳过屏幕/窗口边界外节点的绘制的功能

以下是道听途说,从我过去几年所读到的来看,所以对此持保留态度:

过多的批处理精灵仍然会对性能产生负面影响,即使它们不可见或不在屏幕之外。GPU负责取消由于完全在屏幕之外而不可见的四边形的绘制。它仍然需要处理这些四边形


这是cocos2d的tilemap实现的主要问题,也是为什么它在使用大型tilemap时如此缓慢的原因。在内部,tilemaps也使用相同的sprite批处理技术。

因此,如果我没有弄错,GPU不会考虑spritesheet中但未添加到CCSpriteBatchNode的sprite。但是,当GPU需要计算相应的四元组是否在屏幕中时,位于CCSpriteBatchNode中且不可见的精灵(例如,尚未生成且在敌人缓存中)确实会影响性能。这是正确的吗?无论雪碧是否分批,如果雪碧在屏幕外,则由GPU确定它不必绘制雪碧:在收到LearnCos2D的答案后,我做了更多的研究,发现这个问题证实了他的答案。我添加这个只是为了补充参考资料。