2016-07-06 18 views
1

Ich habe Probleme mit Hinzufügen und Entfernen meiner SKPhysicsJointPin in der TouchseBegan-Funktion. Das Problem ist, dass mein Join in der Funktion didMoveToView deklariert wird, weil es basierend auf den darin enthaltenen Ausdrücken positioniert werden muss.Verwirrendes Problem beim Hinzufügen und Entfernen von SKPhysicsJointPin bei Berührung

Das kann ich nicht auf die SKPhysicsJoint in der TouchseBegan-Funktion verweisen, die für das, was ich versuche, mit meinem Projekt zu tun ist. Irgendwelche Lösungen oder Vorschläge?

Code:

import SpriteKit 

class GameScene: SKScene, SKPhysicsContactDelegate { 

    var head = SKSpriteNode(imageNamed: "crown.png") 
    var headTexture = SKTexture(imageNamed: "crown.png") 

    var neck = SKSpriteNode(imageNamed: "throat.png") 
    var neckTexture = SKTexture(imageNamed: "throat.png") 

    override func didMoveToView(view: SKView) { 

     head.position.x = torso.position.x - 1 
     head.position.y = torso.position.y + 77 
     head.physicsBody = SKPhysicsBody(texture: headTexture, size: head.size) 
     head.physicsBody!.categoryBitMask = ColliderType.part.rawValue 
     head.physicsBody!.contactTestBitMask = ColliderType.part.rawValue 
     head.physicsBody!.collisionBitMask = ColliderType.part.rawValue 
     self.addChild(head) 

     neck.position.x = torso.position.x 
     neck.position.y = torso.position.y + 44 
     neck.physicsBody = SKPhysicsBody(texture: neckTexture, size: neck.size) 
     neck.physicsBody!.categoryBitMask = ColliderType.mjoint.rawValue 
     neck.physicsBody!.contactTestBitMask = ColliderType.mjoint.rawValue 
     neck.physicsBody!.collisionBitMask = ColliderType.mjoint.rawValue 
     self.addChild(neck) 

     let headToNeck = SKPhysicsJointPin.jointWithBodyA(head.physicsBody!, bodyB:neck.physicsBody!, anchor:CGPointMake(head.position.x, head.position.y - 20.8)) 
     headToNeck.shouldEnableLimits = true 
     self.physicsWorld.addJoint(headToNeck) 
    } 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 

     self.physicsWorld.removeJoint(headToNeck) 

    } 
} 
+0

Sie das Gelenk in 'touchesBegan' entfernen können mit' wenn Gelenk lassen = head.physicsBody .joints.first {self.physicsWorld.removeJoint (Joint)} ' – 0x141E

Antwort

0

Versuchen Sie, eine Klassenvariable wie folgt zu schaffen:

class GameScene: SKScene, SKPhysicsContactDelegate { 

     var headToNeck: SKPhysicsJoint! 
     //other variables 

     override func didMoveToView(view: SKView) { 
      //other code 
      self.headToNeck = SKPhysicsJointPin.jointWithBodyA(head.physicsBody!, bodyB:neck.physicsBody!, anchor:CGPointMake(head.position.x, head.position.y - 20.8)) 
      self.headToNeck.shouldEnableLimits = true 
      self.physicsWorld.addJoint(self.headToNeck) 
     } 

     override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
      self.physicsWorld.removeJoint(self.headToNeck) 
     } 
    } 
+0

Ich fand die Lösung gestern tatsächlich war es sehr ähnlich zu dieser Antwort, danke für die Hilfe! –