2016-07-05 3 views
0

У меня есть характер. На кране на экране я запускаю это:Почему в моей игре SpriteKit логика движения отличается?

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

     print(location.x) 
     print("Pos \(self.magician.position.x)") 
     if location.x >= self.magician.position.x { 
      print("R") 
      self.movingRight = true 
     } else { 
      print("L") 
      self.movingLeft = true 
     } 
    } 

Итак, логика: если location.x это> чем мой характер position.x, то это значит, что я постучал по правой стороне, и мой персонаж должен двигаться в этом направлении, вправо. Но я не знаю, почему он движется влево, когда я касаюсь правой стороны.

Может кто-нибудь объяснить мне, почему логика в SpriteKit настолько отличается?

ответ

1

Я правильно понял, что ваш персонаж является подклассом SKSpriteNode, и этот код работает в коде вашего персонажа?

touch.locationInNode(self) 

Это вернет касание в системе координат данного узла (self). Поэтому, если якорная точка вашего персонажа (0,5, 0,5), то есть в середине узла, тогда location.x будет положительным, если вы коснетесь правой стороны и отрицательным, если его косните левой стороной.

Как это соотносится с позицией вашего персонажа x &, позиция y будет зависеть от точки привязки вашей сцены, но ваша проблема связана с попыткой сравнить значения x из двух разных систем координат.

0

Если self.magician добавляется к другому узлу (не self), вы можете преобразовать свою точку:

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

      print(location.x) 
      print("Pos \(self.magician.position.x)") 
      if location.x >= convertPoint(self.magician.position.x, fromNode: self.<thenodewhoaddmagician>) { 
       print("R") 
       self.movingRight = true 
      } else { 
       print("L") 
       self.movingLeft = true 
      } 
     } 

Если вам нужно знать больше информации об этом методе взгляд на официальный Apple, руководство here

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