2015-06-15 3 views
0

Im пытается сделать так, чтобы моя игра узнавала, когда я касаюсь узла в своей сцене, за исключением случаев, когда я использую приведенный ниже код, который, как я думал, будет делать именно то, что я хотел, неправильно определить позицию узла.touch.locationInView не работает, как я думал

Я щелкнул по остальной части экрана, распечатав имя узла, на который я касался, и выяснилось, что мое приложение считает, что узлы находятся в другом месте, чем они есть на самом деле (значение x правильно y очень не активна)

Вы видите что-то не так?

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

    for touch in (touches as! Set<UITouch>) { 
     var TouchlocationEnd = touch.locationInView(self.view!) 
     let touchedNode = self.nodeAtPoint(TouchlocationEnd) 

     var name = touchedNode.name 

     println(name) 

     if name == "start"{ 
      var scene = PlayScene(size: self.view!.bounds.size) 
      scene.scaleMode = .AspectFill 
      self.view!.presentScene(scene) 
     } 
    } 
} 
+0

Очень маловероятно, что _anything_ «работает неправильно». Вы должны начать с предположения, что вы ошибаетесь, а не Cocoa. – matt

+0

Я не думал, что Какао ошибался, наверное, я должен был использовать другое название – Matt

+0

сейчас лучше ????? – Matt

ответ

2

Функция nodeAtPoint(), согласно документам Apple, берет «точку в системе координат узла». Но точка, которую вы нашли, - это местоположение в представлении, которое не обязательно находится в той же системе координат, что и любой узел, который вы кладете здесь подклассы.

Другими словами, я предполагаю, что система координат «self.view» отличается от системы координат «я». Попробуйте что-то вроде этого (непроверено):

let touchPoint = touch.locationInNode(self) 
let touchedNode = self.nodeAtPoint(touchPoint) 
+0

touch.locationInNode (self) вместо touch.locationInView (self.view!) Был проблемой спасибо! Я также решил, что с использованием кода, который я использовал, значение y по какой-то причине инвертировалось. В верхней части экрана было 0, в то время как обычно это дно 0 ... странное – Matt

+0

Это потому, что системы координат для UIView и SpriteKit различны - ось «y» идет в другом направлении. (Вот почему правильно использовать эти функции удобства - это хорошая идея!) Рад, что вы исправились. –

Смежные вопросы