2017-01-20 13 views
1

私はすでにこの質問を別の方法で尋ねてきました。 Swift-Setting a physics body velocity by angleしかし、それに答える3つの試みは残念ながら私が探しているものではありませんでしたが、とにかく私に教えてくれたことに感謝しています。コメントを使ってディスカッションを永続させるのではなく、例とそれ以上の説明で私の質問を簡単に言い換えるべきだと私は決めました。だからここにある。スウィフト - SKNodeをアングルで単純に「前進」させる

私は画面の中央にSKNodeがあるとします。これがボールだとしましょう。そのボールの回転動作は表示されません。私はランダムな角度を選択する方法が必要で、SKNodeがそれに向かって回転していると言い、スクリーンの中心の元の位置から前述の角度で決められた方向に、例えば、スクリーン。私はランダムな角度を決定する方法を知っている

は、SKNodeはそれに回転し、それが画面の端に停止していています。この例で私が必要とするのは、SKNodeを単純に前進させる方法ですが、単一の変数で決められた角度で、速度は2、dxとdyで決まらないことがわかります。

ありがとうございます。

答えて

2

これを行うには、三角法を使用するだけです。 zRotationは0と90の間にあるとき

は、あなたがラジアンに変換以外の角度に何もする必要はありません。 tan(radianAngle)に電話するだけです。今度はtanは、ノードがx軸で1だけ動いたときに、ノードがy軸にどれだけ移動すればよいかを返します。前に三角法を学んだら、私が言っていることを理解する必要があります。三角法を学んでいないなら、それを学んでください。 :)

はのは、ノードのzRotationは、π/ 3ラジアンで60度、であるとしましょう。それをtanに渡すと√3になります。つまり、とdyのパラメータがSKActionの場合、ノードを60度の方向に移動させるには、1:√3の比率でなければなりません。

zRotationは90と180との間にあるときは、あなたが最初のラジアンに変換し、その後、180から角度を減算する必要があります。繰り返しますが、これをtanに渡します。戻り値は、ノードがx軸で-1だけ動いたときにノードがy方向にどれだけ移動するべきかを返します。 dx : dyの比率は-1:tan(angleInRadians)になりました。 zRotation 180と270の間にある場合

、その角度から180を減算し、ラジアンに変換します。 dx : dyの比率は-1:-tan(angleInRadians)です。

最後に、270および360 bewteen zRotationは、360から角度を減算し、ラジアンに変換します。 dx : dyの比率は1:-tan(angleInRadians)です。

角度をラジアンに変換する直前に、角度が90度であることを確認してください。存在する場合はtan(M_PI/2)が定義されていないため、dxdyをハードコードしてください。

関連する問題