當我開發了Android手機上的完全一樣的東西我也找不到任何有用的例子/文章來實現這一點,所以我也這樣說:
當用戶觸摸屏幕,並做了你可以計算出speedX和speedY(像素/秒)(在android中你有一個onFling方法(float velocitY,float velocitX))。
然後,您將以像素/秒爲單位的速度轉換爲每秒鐘的轉數。這意味着如果用戶手指在1秒內行進1500 px,您的輪子將旋轉X次。例如,如果掃視/刷卡speedX和迅速爲1500像素/ s和你的車輪已經爲150px半徑,則計算車輪弧長像這樣:
arc = r * PI. (r=150)
然後就以每秒轉數等計算速度這樣的:
spinSpeed = Math.sqrt((speedX*speedX)+(speedY*speedY))/arc)*360
一旦你的速度,你可以每T毫秒(我用40miliseconds)這樣的改變方向盤轉角:
wheel.angle += spinSpeed;
您也可以實現拖,所以車輪最終減慢,就像這樣:
spinSpeed -= drag_value;
wheel.angle += spinSpeed;
你必須在drag_value調整到你想要的效果(它的速度有多快變慢)。你也許想要將spinSpeed乘以一個常數,這樣你就可以獲得更高的速度(我用了40)。
此實現不包括跟隨用戶手指的車輪。爲此,您必須計算自從最後一次觸摸屏幕(用於X和Y座標)以來用戶手指移動了多少。所以你需要2個座標(lastTouchX,lastTouchY,newTouchX,newTouchY)。如果有座標,則可以計算經過此座標的線的斜率或斜率(在此公式中斜率/斜率爲K:y = kx + n - 標準線公式)。然後你必須計算這兩條線之間的交叉角並將其應用到車輪上。事情是這樣的:
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;
希望你的想法
我不得不做同樣的事情,但對於Android。如果你想知道發表評論後的概念和數學。 – blejzz
jernej,謝謝,我想! – benza