让我简要介绍一下我们的设置。
有一个世界 在世界范围内,有很多地方 在这些地方,有很多人物 现在许多角色共享相同的纹理。
我们目前有 world(layer)-batchNode-character sprite。 world(layer)-batchNode-place sprite
因此,角色的位置是相对于世界的,而不是它所处的位置(概念上)。
我们如何设置类层次结构以便 我们仍然利用batchNode的力量 并且能够使用角色的局部坐标(相对于它所在的位置)
简单的结构,如
world(layer)-place(layer)-batchNode-character(sprite)不起作用,因为世界上会有许多常见字符但不共享batchNode。
答案 0 :(得分:2)
首先,您不需要(多个)图层。您可以让批处理节点取代层。您可能希望有一个主要层用于用户输入,或者通过使用触摸调度程序注册触摸委托类来自行管理用户输入。
从概念上讲,我建议将节点层次结构作为:
scene (touch delegate)
batchNode (places)
batchNode (characters)
或
scene
layer (input)
batchNode (places)
batchNode (characters)
现在假设你的地方(平铺图像?)以某种方式传播到世界各地,他们每个人都有一个位置。要让每个地方的角色都有相对于他们所在地的坐标,你可以做以下两件事之一:
最后,您始终可以创建辅助方法,根据它们所在的位置将精灵的位置转换为本地坐标。这样您就不需要任何特殊设置的节点层次结构,您仍然可以使用本地坐标在必要时。如果你这样做,你可能会发现无论你使用本地坐标还是世界坐标,都没有太大的区别。世界坐标只是字符位置和位置位置,简单的加法/减法可以使您从世界坐标到本地坐标,反之亦然。