SKShapeNode的框架是偏移的

时间:2015-11-19 16:20:02

标签: swift view sprite-kit scale aspect-ratio

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

使用调试选项显示PhysicsBody,我发现它实际上并不以我的精灵为中心。

PhysicsBody is offset

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

scene.scaleMode = .ResizeFill

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

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

SKShapeNode是场景的孩子。

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

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

1 个答案:

答案 0 :(得分:3)

Edge Loop的位置相对于它所连接的节点。通常,对于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)