SKShapeNode 的框架偏移

Frame of SKShapeNode is offset

我正在尝试将 physicsBody 添加到矩形的 SKShapeNode。我使用 fromEdgesWithLoop 构建了我的 PhysicsBody,使用 Node 的框架作为 CGRect 来构建它。

使用调试选项显示 PhysicsBody,我发现它实际上没有以我的 Sprite 为中心。

我在网上搜索发现我应该使用这个:

scene.scaleMode = .ResizeFill

遗憾的是,我尝试了所有 scaleMode 并且没有任何差异。

我还验证了 GameScene 的尺寸,它适合 iPad2 屏幕(我的目标),1024x720。

SKShapeNode 是场景的子项。

在添加 PhysicsBody 及其框架之前,我尝试将节点的位置设置在 Scene 的中心,但这没有任何改变。该节点已经在场景的中心。

myShape.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))
myShape.physicsBody = SKPhysicsBody(edgeLoopFromRect: myShape.frame)

边缘循环的位置是相对于它所连接的节点的。通常,对于 edgeLoopFromRect,位置由

给出
edge_loop_position = node.position + rect.frame.origin

在这种情况下,您的物理体偏移了 myShape 的位置。解决此问题的一种方法是将边循环附加到场景而不是形状节点:

self.physicsBody = SKPhysicsBody(edgeLoopFromRect: myShape.frame )

或者,您可以使用

从框架的位置中减去节点的位置
let rect = CGRect(origin:CGPoint(x:myShape.frame.origin.x-myShape.position.x, y:myShape.frame.origin.y-myShape.position.y), size:myShape.frame.size)
myShape.physicsBody = SKPhysicsBody(edgeLoopFromRect:rect)