2014-09-24 16 views
5

Ich versuche, zwei SKSpriteNode mit SKPhysicsJointPin bei als grüner Punkt auf dem Screenshot unten gekennzeichnet zu verbinden. Später möchte ich physicsBody!.dynamic = true auf Objekt2 aktivieren, um "Swing-Animation" von Objekt2 zu erhalten.So verbinden Sie zwei SKSpriteNodes mit SKPhysicsJointPin - swift

enter image description here

enter image description here

ich Schwierigkeiten am Anfang habe, während die SKPhysicsJointPin Schaffung selbst kann ich nicht einen Fehler in Xcode bekommen es nicht kompiliert.

Hier ist der Code:

import SpriteKit 

class GameScene: SKScene, SKPhysicsContactDelegate { 

let object1 = SKSpriteNode(imageNamed: "white") 
let object2 = SKSpriteNode(imageNamed: "black") 

override func didMoveToView(view: SKView) { 
    // Setup background image 
    self.backgroundColor = UIColor(hex: 0x60c0f3) 

    // Setup physics body to the scene (borders) 
    self.physicsBody = SKPhysicsBody (edgeLoopFromRect: self.frame) 

    // Change gravity settings of the physics world 
    self.physicsWorld.gravity = CGVectorMake(0, -9.8) 
    self.physicsWorld.contactDelegate = self 

    //=========================================== 

    // White object properties 
    object1.physicsBody = SKPhysicsBody(rectangleOfSize: object1.frame.size) 
    object1.physicsBody!.dynamic = false 
    object1.position = CGPointMake(size.width/2 - object1.size.width/2, size.height/2) 

    // Black object properties 
    object2.physicsBody = SKPhysicsBody(rectangleOfSize: object2.frame.size) 
    object2.physicsBody!.dynamic = true 
    object1.anchorPoint = CGPointMake(0, 0) 
    object2.position = CGPointMake(size.width/2 + object2.size.width + 2, size.height/2 + object2.size.height/2) 

    // Create joint between two objects 
    var myJoint = SKPhysicsJointPin.jointWithBodyA(object1.physicsBody, bodyB: object2.physicsBody, anchor: CGPoint(x: CGRectGetMaxX(self.object1.frame), y: CGRectGetMaxY(self.object2.frame))) 

    self.physicsWorld.addJoint(myJoint) 
    self.addChild(object1) 
    self.addChild(object2) 

} 

override func update(currentTime: CFTimeInterval) { 
    /* Called before each frame is rendered */ 
} 
} 

Der Xcode Fehler ich erhalte, ist enter image description here

Bitte raten, was in meinem Code falsch ist. Danke.

Antwort

2

Zwei Probleme: 1) Sie müssen die Knoten mit den Physikkörpern zur Szene hinzufügen, bevor Sie sie mit einem Gelenk verbinden und 2) Sie müssen die Knoten mit dem minimalen Y-Wert und nicht mit dem Maximum verbinden (wenn Sie wollen das Gelenk, das sich wie in Ihrem Diagramm gezeigt verhält, da der Ursprung der Szene die untere/linke Ecke der Ansicht ist und positives Y oben ist.

// Do this prior to adding the joint to the world 
    self.addChild(object1) 
    self.addChild(object2) 

    // Create joint between two objects. Edit: changed MaxY to MinY to attach bodies 
    // at bottom of the nodes 
    var myJoint = SKPhysicsJointPin.jointWithBodyA(object1.physicsBody, bodyB: object2.physicsBody, anchor: CGPoint(x: CGRectGetMaxX(self.object1.frame), y: CGRectGetMinY(self.object2.frame))) 

    self.physicsWorld.addJoint(myJoint) 
+0

Vielen Dank! Es funktionierte :) – Omen