2017-12-21 9 views
1

私は平坦な地形のボールを持っていますが、ユーザーのtouchの位置に従ってボールを移動しようとしていますので、ユーザーが画面上の任意の場所をタップすると、タッチのX位置に私のボールはスプライトキット:ノードは左に移動しません

私のコードは:ユーザが画面上でタップしたとき

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 

    for touch in touches { 

      if (ball?.hasActions())! { 
       ball?.removeAllActions() 
      } 
      let moveBY = SKAction.moveBy(x: touch.location(in: view).x, y: 70, duration: 1) 
      self.ball?.run(moveBY) 
    } 
} 

しかし、ボールはそれに応じて移動し、それが第2のタップに来るとき、ボールはしませんタッチに応じて移動するX

答えて

1

moveToを使用する場合は、moveByを使用しています。

+0

おかげで、それはあなたの答えに、いくつかの説明を追加してください –

0

あなたはこれを試してみてください:

func touchDown(atPoint pos : CGPoint) { 

    if ball.hasActions() { 
     ball.removeAllActions() 
    } 

    let moveBY = SKAction.moveBy(x: pos.x, y: 70, duration: 1) 
    self.ball.run(moveBY) 
} 

は私が

+0

を働いていた機能を変更しました。 –

+1

画面がタップされている場合は、touchDown関数が呼び出されます。したがって、コードはすでにアクションがあるかどうかをテストし、この現在の実行中のアクションを停止します。次に、私はちょうどそれが終了するか、または終了するまで実行される別のアクションを追加します。 – Somebuddy

+0

ありがとうございます –

関連する問題