【问题标题】:Role of CCSpriteBatchNodeCCSpriteBatchNode的作用
【发布时间】:2012-01-31 07:39:16
【问题描述】:

CCSpriteBatchNode 背后的想法是为多个 sprite 渲染一次纹理,这样可以提高性能,而不是将每个 sprite 视为不同的纹理。

但是,我很困惑使用它而不是使用单个纹理图集有什么好处。如果你用这个创建纹理:

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"gameTexture.plist"];

然后使用frame 方法提取您用于精灵的每个图像,那么即使从未引入批处理节点,您的所有图像是否都使用相同的单个渲染纹理?

当然,您可以将批处理节点与纹理图集结合使用,但这如何真正提高性能?如果你不使用batchnode,它是否会多次渲染纹理,即使它被缓存了?

【问题讨论】:

    标签: cocos2d-iphone


    【解决方案1】:

    使用相同的纹理,您不会在每次调用时更改纹理,但您仍会在不同的 glBegin 和 Ends 中渲染所有精灵,使用 CCSpriteBatchNode 将确保其中的每个精灵都在同一调用中渲染

    【讨论】:

      【解决方案2】:

      简单的性能改进来自于 OpenGL 调用数量的减少。如果您不使用 SpriteBatchNode,您的精灵将来自一个纹理,是的,但它们都会进行单独的 OpenGL 调用。批处理节点对象包含收集所有子节点并进行一次调用的代码,这就是为什么您的精灵必须是同一批处理节点的子节点才能获得性能提升。

      0 个批处理节点 + 100 个精灵 = 100 个 OpenGL 调用。

      1 个批处理节点 + 100 个精灵(此批处理节点的子节点)= 1 个 OpenGL 调用。

      如果你真的感兴趣,可以看看 CCSpriteBatchNode.m

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-25
        相关资源
        最近更新 更多