2011-05-18 52 views
0

想象我有一個球。用戶觸摸它並且球升起。對於現在的脈衝方向是靜態創建從觸摸位置脈衝矢量

ball->ApplyLinearImpulse(b2Vec2(20.0f,100.0f),ball->GetWorldCenter()); 

b2Vec2(20.0f,100.0f) 

是脈衝矢量。我想要隨機生成一個脈衝向量。我認爲這應該通過採用觸球位置來完成。

這個問題更多的是數學。如何根據觸摸位置計算隨機脈衝向量?有任何想法嗎?

+0

如果是隨機的,爲什麼它需要涉及到的觸摸位置? – kennytm 2011-05-18 17:40:52

+0

可以很容易地創建一個僞隨機向量,但被賦予了相同的矢量是相同的,但我認爲這只是沒有增益創造更多的工作(這幾乎是不可能接觸到完全相同的點人)。 – kennytm 2011-05-18 17:50:14

回答

1

簡單的解決辦法是建立從球的位置的矢量觸摸位置,並使用一個縮放版本爲您的衝動載體。

編輯: 一些僞代碼來計算這個矢量

-(void) createImpulse(Vector touchPoint) 
{ 
    //this is now a vector pointing from the touch point to the ball 
    Vector diff = [ball->GetWorldCenter() vectorSubtract:touchPoint]; 
    //Generate a random float from 1/2 to 2 
    float scale = randFloat(0.5f, 2.0f); 
    //Scale the vector by the float 
    Vector impulse = [diff scaleBy:scale]; 
    ball->ApplyLinearImpulse(b2Vec2(impulse.x, impulse.y), ball->GetWorldCenter()); 
} 
+0

你能提供一些代碼PLZ? – 2011-05-18 18:07:35

+0

那大約是接近真實的代碼,我也來了,不知道你的框架,比我已經從你的代碼做任何更多。 – 2011-05-18 18:16:01