【问题标题】:Cocos2d: Does CCSpriteBatch node draw only sprites with visible property set to true?Cocos2d:CCSpriteBatch 节点是否只绘制可见属性设置为 true 的精灵?
【发布时间】:2012-09-18 16:18:22
【问题描述】:

CCSpriteBatch 节点是否只绘制可见属性设置为 true 的精灵?

或者它是否也考虑屏幕尺寸?换句话说。如果节点内的精灵在屏幕之外,opengl 绘制调用的性能会反映这一点吗?

【问题讨论】:

  • PS:在收到 LearnCocos2D 的回答后,我做了一些研究,发现这个问题stackoverflow.com/questions/9502586/… 证实了他的回答。我添加这个只是为了提供额外的参考资料。

标签: opengl-es cocos2d-iphone sprite spritebatch


【解决方案1】:

没有也没有。

CCSpriteBatchNode 总是绘制所有子精灵。我不确定是什么让可见 = NO 的精灵不会出现在屏幕上,但从技术上讲,它每次都会绘制所有四边形。它也没有考虑屏幕区域。

未批处理的精灵表现不同。如果一个非批处理的精灵不可见,它就不会被绘制。然而,屏幕外的精灵被绘制。 Cocos2D 没有跳过在屏幕/窗口边界之外绘制节点的功能。

以下是我过去几年所读到的传闻,因此请持保留态度:

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

这是 cocos2d 的 tilemap 实现的主要问题,以及为什么它在大型 tilemap 上如此缓慢。内部瓷砖地图也使用相同的精灵批处理技术。

【讨论】:

  • 所以如果我做对了,GPU 不会考虑 spritesheet 中但未添加到 CCSpriteBatchNode 的 sprite。但是,在 CCSpriteBatchNode 中且不可见的精灵(例如,尚未生成且在敌人缓存中)确实会影响性能,因为 GPU 需要计算相应的四边形是否在屏幕中。这是正确的吗?
  • 无论精灵是否被批处理,如果精灵不在屏幕上,则由 GPU 决定是否不必绘制精灵
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-28
  • 2018-01-27
相关资源
最近更新 更多