2017-01-03 23 views
2

画面の中央にスプライトがあり、画面の左右に触れることで左右に回転できます。(Xcode Swift SpriteKit)スプライトを向いている方向に移動するには

私がしたいことは、スプライトが連続的に前進しているが、常に向いている方向にあることです。私はSKActionsなどで基本的な動きをする方法を知っています...しかし、スプライトが回転している方向に連続的に動きをどのように計算するか分かりません。

数学は私の強みではありませんでしたので、私に役立ついくつかのサンプルコードを非常に感謝しています。

var player = SKSpriteNode() 

override func didMove(to view: SKView) { 



    player = SKSpriteNode(imageNamed: "4B.png") 
    player.setScale(0.3) 
    player.zPosition = 100 
    self.addChild(player) 


} 



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

    if let touch = touches.first { 
     let position = touch.location(in: self) 

     if position.x < 0 { 
      let rotate = SKAction.repeatForever(SKAction.rotate(byAngle: CGFloat(M_PI), duration: 2)) 
      player.run(rotate, withKey: "rotating") 
     } else { 
      let rotate = SKAction.repeatForever(SKAction.rotate(byAngle: CGFloat(-M_PI), duration: 2)) 
      player.run(rotate, withKey: "rotating") 
     } 

    } 

} 



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

    player.removeAction(forKey: "rotating") 
} 



override func update(_ currentTime: TimeInterval) { 
    // Called before each frame is rendered 

} 

}

答えて

3

あなたは罪とCOSを使用する必要があります。 SKActionはあなたのための最高のものではないかもしれないので、あなたはより良い場所を見つけるまで、私はちょうど今の更新方法でこれを行うだろう:

10はあなたがにスプライトをしたい大きさである

sprite.position = CGPoint(x:sprite.position.x + cos(sprite.zRotation) * 10,y:sprite.position.y + sin(sprite.zRotation) * 10)

これは、角度0はスプライトが右を向いていることを意味し、角度90(PI/2)はルックアップし、角度180(PI)は左を見ており、角度270(3PI/2) )が見下ろしている。

+0

パーフェクト - ありがとう、これは治療法です –

関連する問題