SKPhysicsJointFixed在移动节点时不会将节点保持在一起

时间:2017-07-18 18:06:12

标签: swift sprite-kit skphysicsjoint

我创建了2个SKSpriteNodes,并通过SKPhysicsJointFixed连接它们,以使它们粘在一起。问题是当我将SKAction.move(by:, duration:)应用于第一个时,它会单独移动。为什么会这样,我怎么能把它们一起移动?我搜索了很多,但似乎无法找到任何新的或有用的信息。请帮忙。提前谢谢。

以下是代码:

import SpriteKit

class myGame: SKScene {

var node1: SKSpriteNode!
var node2: SKSpriteNode!

func createNode(_ position: CGPoint, color: UIColor) -> SKSpriteNode {
    let node = SKSpriteNode(color: color, size: CGSize(width: 50, height: 50))
    node.position = position
    node.physicsBody = SKPhysicsBody(rectangleOf: node.size, center: position)
    node.physicsBody?.affectedByGravity = false
    node.physicsBody?.allowsRotation = false
    return node
}

func setup() {
    node1 = createNode(.zero, color: .red)
    node2 = createNode(CGPoint(x: 0, y: -50), color: .green)
    self.addChild(node1)
    self.addChild(node2)

    let anchor = CGPoint(x: node1.size.width/2, y: -node1.size.height/2)
    let joint = SKPhysicsJointFixed.joint(withBodyA: node1.physicsBody!, bodyB: node2.physicsBody!, anchor: anchor)
    physicsWorld.add(joint)

}

override func didMove(to view: SKView) {
    setup()
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    node1.run(SKAction.move(by: CGVector(dx: 0, dy: 100), duration: 2))
}


}

1 个答案:

答案 0 :(得分:3)

这确实非常奇怪,但我之前遇到过类似的事情。 它是物理体上的AllowRotation,它会产生问题。

修正:

node.physicsBody?.allowsRotation = true

注意: 第二个节点的物理主体有点偏。我建议你这样做:

node.physicsBody = SKPhysicsBody(rectangleOf: node.size)

您的关节当前位于节点的右上角,修复:

let anchor = CGPoint(x: 0, y: -node1.size.height/2)

除非你想让它像那个ofc:)

如果您还不知道,最后一个提示。在gameViewController中设置showPhysics以查看物理实体的轮廓。在使用物理学时它确实有很大帮助。

view.showsPhysics = true