我用物理机身创建了一个SpriteKit场景。这工作得很好。我也在使用带有“相机节点”的Apple最佳实践来滚动场景。
我的场景节点树是这样的:
Scene
|- World
|- Camera node
|- Game nodes with physics bodys
我的问题是,在游戏中我动态地创建了具有新关节(大多数是固定关节)的新节点。此时,世界节点的位置与开头不同(例如:在开始时(0,0),在游戏期间(1000,500)..) 现在,固定关节的锚点不在我想要的位置,它在场景中的某个位置。
我假设,场景的坐标系与物理引擎的坐标系不同。
对于锚点,我使用以下转换:
[world.scene convertPoint:node.position fromNode:node.parent];
我想将anchorpoint设置在“node”的位置。 移动世界节点后,锚点的计算不再起作用。
感谢您的帮助!
Greetz - 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);
}
答案 0 :(得分:0)
使用SpriteKit物理关节有两个要求:
从你的问题和评论中,听起来你的#1是正确的:当关节位于不是场景的直接子节点的节点之间时,你需要将坐标转换为场景空间,然后再使用它们来定义接头。
但是,当您尝试移动根坐标系时,SpriteKit物理不能很好地处理它。因此,通过移动世界来实现“相机”会给关节带来麻烦。代替:
如果你能够只定位iOS 9.0 / OS X 10.11 / tvOS 9.0及以上,请使用SKCameraNode
而不是移动世界。它也更容易!
(如果您想知道是否只能支持iOS 9,请查看adoption rate statistics,并与您的开发时间表进行比较...如果您暂时无法发货,iOS 9在您完成时可能是“-1”操作系统版本。请记住,热心客户和早期采用者之间也存在很高的相关性。)
如果您仍在支持iOS 8 / OS X 10.10,请尝试在场景中添加额外的图层:通过移动场景中的节点和所有游戏内容的父节点来伪造相机