2011-08-02 43 views
2

我仍在試圖弄清楚如何創建炸彈模擬。我有一個球和一個炸彈,當球與炸彈相撞時,炸彈爆炸並且強制球被扔向哪個方向。創建炸彈 - Cocos2d/Box2d

現在我正在使用ApplyLinearImpulse,但我不得不選擇一個具體方向。我只需要被迫球在不斷向它拋出。

例如,

球在彈的左上側拋出,然後球被向上和向剩下。 球被扔在炸彈的左下方,然後球被迫下來並向左。

基本上,它只是需要一個炸彈。誰能告訴我如何做到這一點?我是Box2d的新手。

這就是我現在使用的。

-(void) explodeBomb 
{ 
    b2Vec2 force = b2Vec2(-20,20); // give the direction for the force. 

    _ballBody->ApplyLinearImpulse(force, _ballBody->GetWorldCenter()); 
} 
+0

不應該的方向只是在'方向pos(炸彈) - pos(球)'? – bdares

回答

4

你需要一些數學。假設身體和炸彈的位置在bodyPositionbombPosition分別爲:

double diffX = bodyPosition.x - bombPosition.x; 
double diffY = bodyPosition.y - bombPosition.y; 
double distance = sqrt(diffX * diffX + diffY * diffY); 
double normalizedX = diffX/distance; 
double normalizedY = diffY/distance; 

現在假設你想申請的20單位力:

float factor = 20.0f; 
b2Vec2 force(normalizedX * factor, normalizedY * factor); 
_ballBody->ApplyLinearImpulse(force, _ballBody->GetWorldCenter()); 
+1

不要把這個怪異的,但我愛你哈哈。你能向我解釋你剛剛做了什麼,因爲那正是我所說的。 – Jonathan

+0

@Jon:基本上上面的代碼塊計算方向的歸一化向量,而第二塊代碼根據你想要應用的力來放大歸一化的向量。 p/s:歸一化矢量是長度爲1個單位的矢量 – Lukman