首先,您不需要(多个)层。您可以让批处理节点代替层。您可能希望有一个用于用户输入的主层,或者通过向触摸调度程序注册一个触摸委托类来自己管理用户输入。
从概念上讲,我推荐的节点层次结构是:
scene (touch delegate)
batchNode (places)
batchNode (characters)
或者
scene
layer (input)
batchNode (places)
batchNode (characters)
现在假设您的位置(平铺图像?)以某种方式分布在世界各地,它们每个都有一个位置。要让每个地方的角色都有相对于他们所在位置的坐标,您可以执行以下两项操作之一:
- 将字符batchnode的位置设置为对应位置的位置。如果您只在该位置批处理字符,则此方法有效。
- 如果您想对所有相同的字符进行批处理而不考虑位置,您可以将“虚拟”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.