我创建了一个SpriteKit场景与物理身体.这是非常好的工作.我也在滚动场景,使用苹果最佳做法与“相机节点”.
我的场景节点树是这样的:
Scene |- World |- Camera node |- Game nodes with physics bodys
我的问题是,在游戏过程中,我动态地创建了新的关节(主要是固定关节).在这一点上,世界节点的位置与起始位置不同(例如:开始时(0,0),游戏过程中(1000,500))
现在,固定关节的锚点不在我想要的位置,它在现场的某个地方.
我假设场景的坐标系与物理引擎的坐标系不同.
对于锚点,我使用以下转换:
[world.scene convertPoint:node.position fromNode:node.parent];
我想将锚点设置在“节点”的位置.
移动世界节点后,锚点的计算不再运行.
谢谢你的帮助!
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); }
解决方法
使用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,请尝试为您的场景添加一个额外的图层:通过移动作为场景的孩子的节点和所有游戏内容的父母来伪造相机.