【问题标题】:Adding contents of a CCSprite to another CCSprite without performance hit将 CCSprite 的内容添加到另一个 CCSprite 而不影响性能
【发布时间】:2015-02-02 18:07:06
【问题描述】:

我有一个 iPad 应用程序,其中包含 400 个CCSprites 的网格,其中一些包含已经分层在一起的多个精灵。 我没有使用过CCSpriteBatchNode,因为我相信ZOrder 对于节点中的所有项目都需要相同,但事实并非如此。性能是可以接受的。 但是,我需要可选地在 400 个精灵的中心覆盖一个小点(如果用户希望显示一个网格以帮助布局)。问题是,通过添加另一个CCSprite(使用addChild),我现在在屏幕上有超过800 个精灵,并且它对性能的影响很大。 有没有办法将新的精灵绘制到已经存在的不影响性能的精灵上? (我猜想动态生成一个由零件组成的新精灵,但那不是一组堆叠的CCSprites

我正在使用 Cocos2d V2.3 - 我确实尝试将项目转换为 Cocos2d V3,但发现性能稍差,并且导致许多扩展问题,鉴于项目已接近完成,这意味着最好在 V2.3 中完成。

非常感谢您的任何建议。 PS:我发现了一些类似的问题,但他们处理的是如何堆叠精灵 - 这不是问题,我可以做到,这是我正在努力绘制的新精灵。

【问题讨论】:

  • tough ... 如果点真的是一个点(不太复杂),您可以尝试在 CCSprite 上使用着色器来“点化”...这不会添加绘图调用,并且性能影响应该是最小的。您可以使用制服控制 .hasDot 着色器。
  • 知道我将如何做到这一点,或者有一个很好的资源来提供帮助吗?我从来没有使用过着色器,所以不知道从哪里开始。有什么方法可以从多个精灵动态创建纹理,然后我可以将其用于显示的精灵?
  • 尝试批处理节点,看看是否能修复性能。如果是这样,请重新设计 zorder 以改用 vertexz(可能需要启用深度缓冲)。顺便说一句,你确定有 v2.3 吗?我认为 2.2 是最新的 v2.x 正式版本。

标签: cocos2d-iphone ccsprite


【解决方案1】:

将现有精灵的纹理更改为带有点的纹理。
如果此解决方案与您的情况不匹配,请提供屏幕截图(或部分屏幕截图),或更详细地说明您场景中的精灵。

【讨论】:

    【解决方案2】:

    答案以CCRenderTexture 的形式出现——将所有精灵绘制成一个纹理,然后将其用于单个CCSprite

    【讨论】:

    • 这只在精灵没有改变的情况下才有用,因为如果它们改变了,那么每次重新创建渲染纹理会使事情变得更慢
    • 我应该在一开始就澄清 - 精灵不会改变,所以这就是我的解决方案。运行应用程序时 CPU 从约 80% 减少到 12%。
    猜你喜欢
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多