2015-12-25 20 views
5

Ich bin mit einem xcode-Projekt rum und versuche, einen roten SKShapeNode-Ball zu bewegen, wenn ich ihn berühre. Mein eigener Quellcode in der Berührung begann Klasse tut nicht den Trick. Was ist der Fehler mit meinem Code und was muss ich tun, um es zu beheben?Swift Sprite Kit Beginne Touch-Funktion

import SpriteKit 

class GameScene: SKScene { 

    //Rectangle Skeletions 
    var leftWallRect = CGRect(x: 0, y: 0, width: 40, height: 1000) 

    var ball = SKShapeNode(circleOfRadius: 25); 


    override func didMoveToView(view: SKView) { 

     // Declare the Sprites in your scene 
     var ball = SKShapeNode(circleOfRadius: 25); 
     let leftWall = SKShapeNode(rect: leftWallRect); 
     let rightWall = SKShapeNode(rect: leftWallRect); 
     let pin = SKSpriteNode(imageNamed: "pin"); 

     // Ball Properties 
     ball.strokeColor = UIColor.blackColor() 
     ball.fillColor = UIColor.redColor() 
     ball.position = CGPointMake(self.frame.width/2 , self.frame.height/4 - 100) 
     self.addChild(ball) 

     // Left Wall Properties 
     leftWall.fillColor = UIColor.purpleColor() 
     leftWall.strokeColor = UIColor.blackColor() 
     leftWall.position = CGPointMake(self.frame.size.width/3 - 45, self.frame.size.height/2 - 400) 
     self.addChild(leftWall) 

     //Right Wall Properties 
     rightWall.fillColor = UIColor.purpleColor() 
     rightWall.strokeColor = UIColor.blackColor() 
     rightWall.position = CGPointMake(self.frame.size.width/2 + 175, self.frame.size.height/2 - 400) 
     self.addChild(rightWall) 
    } 

    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 
     /* Called when a touch begins */ 

     let touch = touches.first as! UITouch 
     let touchLocation = touch.locationInNode(self) 

     if touchLocation == ball.position{ 

      ball.position = touchLocation 

      println("Touches"); 
     } 
    } 

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

Ist '-touchesBegan: withevent:' gerufen werden? (Richten Sie einen Haltepunkt ein, um zu sehen, ob es ist) –

+0

Ich überprüfte und es wird nicht aufgerufen. Wie repariere ich es? @NicolasMiari –

+0

Normalerweise liegt das daran, dass die Eigenschaft 'userInteractionEnabled' (geerbt von' UIResponder') auf 'false' gesetzt ist. Der Standardwert ist jedoch 'true' (zumindest für' UIResponder'; nicht sicher für 'SKScene'). –

Antwort

2

LOL wow, das ist ein lustiges, if touchLocation == ball.position ich beeindruckt wäre, wenn Sie die genaue Pixelposition Ihres Ball schlagen kann. Was Sie wollen, ist dies:

let touch = touches.first as! UITouch 
let touchLocation = touch.locationInNode(self) 
let touchedNode = self.nodeAtPoint(touchLocation) 
if touchedNode == ball{ 
... 

Aber persönlich, was ich tun würde, ist eine Unterklasse von SKSpriteNode machen, und berühren Code Ihres Kugel in dieser Berührung des Kindes Routine