2016-04-13 3 views
0

Я стараюсь объяснить это наилучшим образом. У меня есть этот круг, который я могу вращать, когда мой палец движется по кругу. Проблема Im заключается в том, что когда Im вращает круг, и я перемещаю палец за пределы круга, вращение останавливается. Я бы хотел, чтобы он все еще имел прикосновение, даже если мой палец находится за пределами узла. Он работает, когда Im в одном контроллере представления, но в spritekit я не могу понять это.Как заставить мой узел вращаться, даже если мой палец находится за пределами узла?

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

    for touch in touches { 
     let location = touch.locationInNode(self) 
     let node = self.nodeAtPoint(location) 


     if node.name == "circle" { 

      let dy = circle.position.y - location.y 
      let dx = circle.position.x - location.x 
      let angle2 = atan2(dy, dx) 
      circle.zRotation = angle2 


      } 
      } 
     } 
+0

Вы вышли из «круга» так 'пусть узел = self.nodeAtPoint (location) 'не возвращает« круг », поэтому' if node.name == «circle» 'is false. – beyowulf

+0

@beyowulf Да, но знаете ли вы, как я могу заставить это работать? – coding22

+0

В одном проекте контроллера вида я могу использовать этот код, и он работает, но в spritekit круг не вращается: 'let touch = touchhes.first if touch! .view == circle {}' – coding22

ответ

1

Объявляет дополнительный SKNode для удержания текущего вращающегося узла, как var rotatingNode:SKNode?. Вы можете переопределить touchesBegan.

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?){ 
    for touch in touches { 
     let location = touch.locationInNode(self) 
     let node = self.nodeAtPoint(location) 


     if node.name == "circle" || node.name == "rightCircle" { 

      self.rotatingNode = node 


      } 
      } 
     } 

С вашего комментария кажется, что у вас есть другой код в touchhesMoved, чем то, что опубликовано в вашем вопросе. Но если вы хотите, чтобы повернуть либо круг или rightCircle потом что-то вроде:

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

    for touch in touches { 




      let dy = self.rotatingNode?.position.y - location.y 
      let dx = self.rotatingNode?.position.x - location.x 
      let angle2 = atan2(dy, dx) 
      self.rotatingNode?.zRotation = angle2 



      } 
     } 

Тогда в touchesEnded:

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     self.rotatingNode = nil 
    } 
+0

'var isTouchInCircle = false' is что вы заявили об этом? – coding22

+0

Спасибо, что это работает! – coding22

+0

У меня есть другой круг и его движущиеся оба круга, когда я поворачиваю один из кругов. – coding22