2016-10-23 12 views
2

結果私は達成するために探して:私はスポークを持つ自転車の輪であるノードを持っています。ユーザーが画面をテープで録音すると、ホイールがバウンスするだけでなく、タップごとに回転するようにしたいと思います。ユーザーが画面をタップしたときにSpriteノードを回転させる方法は?スウィフト3

私が今行っていること:ノードは、ユーザーが画面をタップしたときに、まさにそれを跳ね返します。しかし、それは回転しません。

私はまだ素早く学んでいますので、助けや助言をいただければ幸いです。

コード

wheelNode = SKSpriteNode(imageNamed: "wheel") 
    wheelNode.zPosition = 1 
    wheelNode.position = CGPoint(x: self.frame.midX, y: self.frame.midY) 
    wheelNode.physicsBody = SKPhysicsBody(circleOfRadius: wheelNode.size.width/0.70) 
    wheelNode.physicsBody?.isDynamic = true 
    wheelNode.physicsBody?.allowsRotation = true 

    self.addChild(wheelNode) 

override func touchesBegan(_ _touches: Set<UITouch> , with event: UIEvent?) { 
    if gameOver == false { 

    self.wheelNode.physicsBody?.velocity = CGVector(dx: 0, dy: 0) 
    self.wheelNode.physicsBody?.applyImpulse(CGVector(dx: 5, dy: 25)) 

    } 

} 
+0

'SKAction.rotate(byAngle:CGFloat、duration:TimeInterval)'のようなsomehingを試してみてください。どのくらいの角度を回転させたいのかを設定することができます。角度をつけて回転させる角度を設定することができます。 – DevX10

+0

はそれを実行するために使用します: 'run(SKAction.rotate(byAngle:CGFloat、duration:TimeInterval))' – DevX10

+0

こんにちは@Ergo、ありがとうあなたの応答のために!私はSKActionがtouchesBegan関数の外に行くと仮定しますか?ありがとうございました。 –

答えて

4

SKSpriteNodeが回転しているように、touchesBeganにこれを追加します。

wheelNode.run(SKAction.repeatForever(SKAction.rotate(byAngle: CGFloat.pi * 2.0, duration: 2)), withKey: "rotateWheel") 

CGFloat.piすることができます

-CGFloat.piに変更し、逆方向に回転させるには完全な腐敗の継続時間を変更するための継続時間ation。

removeAction(forKey: "rotateWheel") 

この方法では、ホイールの回転が物理学の世界に影響を受けません:touchesEnded

は、アクション、呼び出しを停止します。別の方法で回転をしたい場合は、このリンクを見てください(@ Knight0fDragonのコメントを読んでください)。https://stackoverflow.com/a/39779986/6728196

ロジックは同じですが、それでも同じです。その中でtouchesBeganで回転を開始し、終了/ touchesEndedで停止する必要があります。あなたは物理学ベースのゲームの残りの部分に一致している回転を持っているよりも

self.wheelNode.physicsBody?.applyAngularImpulse(5) 

+0

こんにちは@Nik、あなたが提供したコード/答えが働いた。私たちはまだこの話題にいますが、あなたには関連する質問があります。ユーザーが画面をタップしたときにのみwheelNodeを回転させるには、何を追加または変更する必要がありますか?ユーザーが画面を一度タップしたとしたら、画面がタップされたときにホイールが回転するようにするために何をする必要がありますか?次に徐々に減速して停止しますか?それは私がちょうど興味があったものです。 –

+0

@ P.Dane Hmm ...私は実際にはわかりません。あなたはSKActionメソッドを使用することはできませんでした。なぜなら、それは永遠に繰り返しを使用するからです。リンクに用意されている他の方法の1つを使用すると、physicsworldがホイールを遅くするようにしなければなりません。あなたが望むなら、あなた自身でそれを試してみて、それに関する質問を開きます – Nik

4

は、touchesBeganメソッドに次の行を追加します。

関連する問題