2016-07-05 6 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) 

これは、指定されたノード(自己)の座標系の接触を返します。したがって、キャラクターのアンカーポイントがノードの真ん中(0.5、0.5)の場合、右側にタッチした場合はポジションxが、ポジションで左側にタッチされた場合はlocation.xが負の値になります。

これはキャラクターのx &の位置とどのように比例しますかは、シーンのアンカーポイントに依存しますが、問題は2つの異なる座標系の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

にこの方法を見てについての詳細を知る必要がある場合
関連する問題