我正在使用CCSpriteBatchNode一次基本上只画一个像素(使用1x1色板)绘制一条线。 我需要执行此操作是因为用户正在实时控制线条的位置(这不是绘图应用程序,但我认为我的工作具有可比性)。

事实证明,当我将15-16k个孩子添加到batchNode时,它将停止注册新的孩子。 基本上看来笔墨水用完了!

我在cocos2d代码中打了一点点,但似乎一点都没错。 它只是停止注册新的子节点。 有人知道为什么是这样吗?

===============>>#1 票数:1 已采纳

首先,让我这样说,这确实是一种巨大的轻描淡写:

哎哟!

接下来,技术原因。 批处理了16.384个精灵后,它们将立即无法渲染。 由于每个子图形都使用一个四边形(4个顶点)在屏幕上渲染该子图形,因此您每次批处理操作均达到65.536个顶点的顶点限制。

每次批处理操作都不会绘制更多的顶点( VBO缓冲区限制 )。 这是一个技术限制。 您可以尝试将另一个CCSpriteBatchNode用作其他Sprite,但是认真地说,您在这里走不通。

如果您只需要画线,那可能是我能想到的最糟糕的方法。 考虑使用线条画(ccDrawLine),单个像素(我相信也存在ccDrawPixel,但15k像素将非常慢)或着色器可实现相同或相似的效果。 您甚至可以使用CCDrawNode使用cocos2d 2.1批量绘制图元。

我在YETIPIPI中成功使用的另一种解决方案是使用有限数量的sprite,例如20到200,并将它们绘制到CCRenderTexture。 每次添加新的精灵时,都会重新使用最近最少使用的精灵。 通过不清除渲染纹理,您可以继续使用更少的精灵在其上进行绘制,同时保留之前绘制的所有内容。 通过绘制具有低不透明度的精灵,您甚至可以获得在相同位置绘制更长时间的效果,以使该区域更加不透明。

  ask by Samantha John translate from so

未解决问题?本站智能推荐: