ios – SpriteKit物理接触对于移动场景的破坏

前端之家收集整理的这篇文章主要介绍了ios – SpriteKit物理接触对于移动场景的破坏前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我创建了一个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,请尝试为您的场景添加一个额外的图层:通过移动作为场景的孩子的节点和所有游戏内容的父母来伪造相机.

猜你在找的iOS相关文章