2010-12-06 24 views
2

目前我在我的一個遊戲中使用Box2D物理引擎 - 我想知道是否可以創建各種重力井,其中所有物體都被一個任意點吸引。是否有某種方式可以做到這一點,還是我必須對各個機構應用各種自定義力量? (我試圖製作一個靜態的超密體,但是Box2D並不適用牛頓的萬有引力定律)Box2D(C++)Gravity Wells

另外,有沒有一種方法可以製作反重力井?我可以製作一個以任意點爲中心的密集球體並使用浮力達到這個目的嗎?

回答

4

不幸的是,這個功能並沒有內置到Box2D中。最簡單的方法是獲取重力井和剛體之間的角度和距離,並相應地設置物體的速度。

要獲取角度:

double dx = rigidBodyX - gravityWellX; 
double dy = rigidBodyY - gravityWellY; 
double angle = atan2(dy, dx); 
// angle is in radians, use atan2(dy, dx)/PI * 180 if 
// you need degrees 

爲了獲得距離:

double dx = rigidBodyX - gravityWellX; 
double dy = rigidBodyY - gravityWellY; 
double dist = sqrt(dx * dx + dy * dy); 

我使用閃光燈,我寫了一個庫調用QuickBox2D颳起了一個簡單的例子。這可能沒有那麼有用,因爲語法與C++ Box2D庫的語法有很大不同,但基本原理是相同的。這也不是一個完美的例子,但它可能會讓你開始。

See The Flash Example

+0

我擺弄您的閃光版和更改的行49 + 50〜 dir.x = currVel.x +(強度* Math.cos(ANG))/(DIST * DIST); dir.y = currVel.y +(intensity * Math.sin(ang))/(dist * dist); 並明顯在上面的代碼之前加上了這個 var dist:Number = dist(big,little); – conradev 2010-12-06 20:51:45