一尘不染

如何使物理物体粘附到节点的锚点

swift

我在场景中间有四个正方形,分别设置了多个锚点。轻按时,它们会一起移动并根据位置分开:

 func rotate(angle : CGFloat, animated : Bool) {
    var rotateAction : SKAction!

    if animated {
        rotateAction = SKAction.rotateByAngle(angle, duration: 0.6)
    }
    else {
        rotateAction = SKAction.rotateByAngle(angle, duration: 0)
    }
    for node in self.children as! [SKSpriteNode] {

        node.runAction(rotateAction)
    }
}

}

我的问题是节点的物理实体严格地停留在锚点上,而不是节点本身,这给我带来了很多麻烦。我如何才能使每个节点具有所需的锚点,并使物理物体直接停留在节点上?如有必要,将发布更多代码。


阅读 229

收藏
2020-07-07

共1个答案

一尘不染

您需要将锚点应用于物理物体,它不了解什么是子图形,这只是子图形使用的另一条信息,因此请使用以下计算方法确定子图形的中心位置,然后将其应用转移到物理机体,以便它可能会移动:

 let centerPoint = CGPointMake(sprite.size.width / 2 - (sprite.size.width * sprite.anchorPoint.x), sprite.size.height / 2 - (sprite.size.height * sprite.anchorPoint.y))
 sprite.physicsBody = SKPhysicsBody(rectangleOfSize: sprite.size, center: centerPoint)

迅捷3+:

 let centerPoint = CGPoint(x:sprite.size.width / 2 - (sprite.size.width * sprite.anchorPoint.x), y:sprite.size.height / 2 - (sprite.size.height * sprite.anchorPoint.y))
 sprite.physicsBody = SKPhysicsBody(rectangleOf: sprite.size, center: centerPoint)

更少的文字:

 let centerPoint = CGPoint(x:sprite.size.width * (0.5 - sprite.anchorPoint.x), y:sprite.size.height *(0.5 - sprite.anchorPoint.y))
2020-07-07