我已经使用物理体创建了一个SpriteKit场景,目前运行良好。同时,我也按照苹果的最佳实践方法,通过“相机节点”对场景进行滚动。
我的场景节点树如下:
Scene
|- World
|- Camera node
|- Game nodes with physics bodys
我的问题是,在游戏过程中,我动态地创建新的节点和新的关节(主要是固定关节)。此时,世界节点的位置与一开始不同(例如:开始时为(0,0),游戏进行中为(1000,500))。
现在,固定关节的锚点不在我想要的位置,而是在场景中的某个位置。我猜测,场景的坐标系统与物理引擎的坐标系统不同。
对于锚点,我使用以下转换:
[world.scene convertPoint:node.position fromNode:node.parent];
我想将锚点设置在“节点”的位置。移动世界节点后,锚点的计算不再起作用。
感谢您的帮助!
问候 - Nekro
更新:
用于将场景居中于玩家的代码
- (void)centerOnNode:(SKNode*)node {
CGPoint cameraPositionInScene = [node.scene convertPoint:node.position fromNode:node.parent];
node.parent.position = CGPointMake(node.parent.position.x - cameraPositionInScene.x, node.parent.position.y - cameraPositionInScene.y);
}
[world convertToPoint:node.position toNode:world.parent]
。另外,请确保node.position
是以世界坐标表示的(应该是),并且设置了collisionBitMask
,以确保这两个物体不会发生碰撞。 - 0x141ECGPoint cameraPositionInScene = [node.scene convertPoint:node.position fromNode:node.parent]; node.parent.position = CGPointMake(node.parent.position.x - cameraPositionInScene.x, node.parent.position.y - cameraPositionInScene.y);
}` - Nuker