如何使用CCSpriteBatchNode仍然使用本地坐标?

时间:2012-06-21 04:00:06

标签: cocos2d-iphone textures

让我简要介绍一下我们的设置。

有一个世界 在世界范围内,有很多地方 在这些地方,有很多人物 现在许多角色共享相同的纹理。

我们目前有 world(layer)-batchNode-character sprite。 world(layer)-batchNode-place sprite

因此,角色的位置是相对于世界的,而不是它所处的位置(概念上)。

我们如何设置类层次结构以便 我们仍然利用batchNode的力量 并且能够使用角色的局部坐标(相对于它所在的位置)

简单的结构,如
world(layer)-place(layer)-batchNode-character(sprite)不起作用,因为世界上会有许多常见字符但不共享batchNode。

1 个答案:

答案 0 :(得分:2)

首先,您不需要(多个)图层。您可以让批处理节点取代层。您可能希望有一个主要层用于用户输入,或者通过使用触摸调度程序注册触摸委托类来自行管理用户输入。

从概念上讲,我建议将节点层次结构作为:

scene (touch delegate)
  batchNode (places)
  batchNode (characters)

scene
  layer (input)
    batchNode (places)
    batchNode (characters)

现在假设你的地方(平铺图像?)以某种方式传播到世界各地,他们每个人都有一个位置。要让每个地方的角色都有相对于他们所在地的坐标,你可以做以下两件事之一:

  1. 将字符batchnode的位置设置为相应位置的位置。如果您只批处理该位置的字符,则此方法有效。
  2. 如果要批处理所有相同的字符而不管地点,可以将“虚拟”CCSprites(使用微小的,完全透明的图像)添加到批处理节点,并将每个字符放置在特定位置的位置。然后将此地点的字符添加为此精灵的子项。如果角色从一个地方移动到另一个地方,请从一个虚拟精灵中移除它们并将它们添加到相应的其他虚拟精灵中。
  3. 最后,您始终可以创建辅助方法,根据它们所在的位置将精灵的位置转换为本地坐标。这样您就不需要任何特殊设置的节点层次结构,您仍然可以使用本地坐标在必要时。如果你这样做,你可能会发现无论你使用本地坐标还是世界坐标,都没有太大的区别。世界坐标只是字符位置和位置位置,简单的加法/减法可以使您从世界坐标到本地坐标,反之亦然。