:ユーザが画面に触れてい
fling/swipe(画面上で指を動かして画面から削除します)、speedXとspeedYをピクセル/秒で計算します(アンドロイドではonFling(float velocitY、float velocitX)メソッドがあります)。
次に、ピクセル/秒単位の速度を回転/秒に変換します。つまり、指差しされたユーザーが1秒間に1500ピクセル移動した場合、ホイールはX回回転します。例えば情事/スワイプspeedXとスピーディが1500ピクセル/秒であり、あなたのホイールが150ピクセルの半径を持っている場合、あなたはそのようなホイールの弧の長さを計算します。
arc = r * PI. (r=150)
次に、あなたは次のように1秒当たりの回転数で速度を計算これは:あなたはスピードを持っていたら
spinSpeed = Math.sqrt((speedX*speedX)+(speedY*speedY))/arc)*360
あなたは、すべてのTミリ秒(私は40milisecondsを使用)このように、車輪の回転角度を変更することができます。
wheel.angle += spinSpeed;
をあなたはまた、実装する必要がありますドラッグ、そのホイールは最終的にこのように、遅くなる:
spinSpeed -= drag_value;
wheel.angle += spinSpeed;
あなたは所望の効果(それが遅くなりますどのくらいの速)にdrag_valueを調整する必要があります。あなたは定数でスピンスピードを掛けたいので、スピードを上げることができます(私は40を使いました)。
この実装には、ユーザーの指に続くホイールは含まれません。これを行うには、画面の最後のタッチ(X座標とY座標)以降にユーザーの指がどれだけ移動したかを計算する必要があります。したがって、2つの座標(lastTouchX、lastTouchY、newTouchX、newTouchY)が必要です。座標がある場合、この座標を通過する線の傾きまたは勾配を計算することができます(勾配/勾配は、この式ではKです。y = kx + n - 標準線の式)。次に、この2つの線の交差角度を計算し、それをホイールに適用する必要があります。このような何か:
tg = ((k1-k2)/(1+(k1*k2))); // k1 is the slope of the previous touch coordinate; k2 is the slope of the current touch coordinates
angle = Math.toDegrees(Math.atan(Math.abs(tg)));
wheel.angle += angle; // to implement spinning in the other way use wheel.angle -= angle;
は、あなたのアイデアを得るホープ
私はまったく同じことをしなければなりませんでしたが、アンドロイドのために。あなたがコメントとコメントの投稿の背後にある概念と数学を知りたいのであれば。 – blejzz
jernej、ありがとう、私は欲しいです! – benza