1

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

有一个世界。
世界上,有很多地方。
在这些地方,有很多字符。
现在许多角色共享相同的纹理。

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

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

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

简单的结构比如
world(layer)-place(layer)-batchNode-character(sprite) 是行不通的,因为在一个世界中会有很多常见的字符但不共享 batchNode。

4

1 回答 1

2

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

从概念上讲,我推荐的节点层次结构是:

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

或者

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

现在假设您的位置(平铺图像?)以某种方式分布在世界各地,它们每个都有一个位置。要让每个地方的角色都有相对于他们所在位置的坐标,您可以执行以下两项操作之一:

  1. 将字符batchnode的位置设置为对应位置的位置。如果您只在该位置批处理字符,则此方法有效。
  2. 如果您想对所有相同的字符进行批处理而不考虑位置,您可以将“虚拟”CCSprites(使用一个微小的、完全透明的图像)添加到批处理节点并将每个字符定位到特定位置的位置。然后将这个地方的角色添加为这个精灵的孩子。如果角色从一个地方移动到另一个地方,请将它们从一个虚拟精灵中移除,并将它们添加到相应的另一个虚拟精灵中。

Finally, you can always create helper methods that transform the position of a sprite to local coordinates based on the place they're in. That way you don't need any specially setup node hierarchy and you can still work with local coordinates where necessary. If you do that, you may find that whether you use local or world coordinates doesn't really make much of a difference. World coordinates are simply character position plus place position, a simple addition/subtraction gets you from world to local coordinates and vice versa.

于 2012-06-21T08:48:44.670 回答