2015-05-30 3 views
0

Я пытаюсь сделать кнопку, которая является SKLabelNode. Когда он нажимается, он должен менять сцены, но что-то не так с линией, где объявлено местоположение.Ошибка при нажатии кнопки Sprite Kit | Swift

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 
    super.touchesBegan(touches, withEvent: event) 

    let location = touches.locationInNode(self) 
    let touchedNode = self.nodeAtPoint(location) 

    if touchedNode.name == "startGameButton" { 
     let transition = SKTransition.revealWithDirection(SKTransitionDirection.Down, duration: 1.0) 

     let scene = GameScene(size: self.scene.size) 
     scene.scaleMode = SKSceneScaleMode.AspectFill 

     self.scene.view.presentScene(scene, transition: transition) 
    } 
} 

Ошибка здесь, на линии.

let location = touches.locationInNode(self) 

Он читает

'Set < NSObject>' не имеет элемент с именем 'locationInNode'

Я не уверен, как это исправить. Я просмотрел много шаблонов рабочих кнопок, но у меня всегда есть ошибка.

+0

Google «Set < NSObject>„не есть член с именем“locationInNode» – sangony

+0

Вы также можете попробовать эту кнопку Sprite набор, он работает как родной UIButton из UIKit https://github.com/rogermolas/ RMSpriteButton/blob/master/RMSpriteButton/RMSpriteButton.swift – Roger

ответ

1

Проблема заключается именно в том, что содержит ошибка: Set<NSObject> не имеет метода с именем locationInNode. Что вам нужно сделать, так это получить объект из Set; проверьте, что это объект UITouch; если это так, вы можете использовать его, чтобы получить контактное местоположение. Попробуйте:

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { 
    if let location = (touches.first as? UITouch)?.locationInNode(self) { 
     // ... 
    } 
} 

Или

if let touch = touches.first as? UITouch { 
    let location = touch.locationInNode(self) 
    // ... 
} 
+0

Спасибо, сработало! –

0

Чтобы это исправить, это исправление по умолчанию, он просто перебирает через все штрихи.

for touch: AnyObject in touches { 
     let location = touch.locationInNode(self) 
     node = self.nodeAtPoint(location) 
     //do something 
}