2011-08-10 70 views
1

我有一個關於cocos2d和box2d的問題。 我必須創建一個簡單的輪子,根據用戶如何觸摸Ipad應用程序的輪子來旋轉。 我希望根據一定的觸摸動作,車輪以一定的速度開始,並在一些旋轉開始後降低速度,直到它停止。 (如經典的幸運輪)。在iPad上觸摸cocos2D和(?)Box2d的車輪動畫?

我需要一些提示。你認爲只用cocos2d就可以做到這一點嗎?或者我必須使用Box2D?我已經開始使用Box2d了,它非常強大,但是有可能給一個物體一定的起始速度旋轉和之後,讓世界模擬來停止物體?

非常感謝! Benza

+0

我不得不做同樣的事情,但對於Android。如果你想知道發表評論後的概念和數學。 – blejzz

+0

jernej,謝謝,我想! – benza

回答

0

當我開發了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; 

希望你的想法

+0

非常感謝您的詳細解答!我會嘗試用cocos2d在Ios中實現你的方式!希望我能做到! – benza

0

ü可能現在想通,但任何方式.. u能造輪子,並與觸摸一些初步的旋轉和速度啓動。然後根據您的需要啓用摩擦,以便在一段時間後顯示物體。 希望它有幫助