【发布时间】: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 正式版本。