2017-10-09 72 views
0

我正在使用LibGDX創建Java桌面2D遊戲。Box2D - 物理受控運動

我需要能夠移動物體(由玩家用W/A/S/D控制)。
移動速度始終相同(從移動對象的字段中讀出)。

當他們移動時,他們仍然應該受到物理的影響。
這意味着當離開磁鐵時會讓你移動得更慢,朝它移動會使你更快並移過它會導致你移動一條曲線。 (見圖片中藍色部分)

此外,在移動時會敲你走單一的衝動,但你繼續前進(見圖片中紅色部分)

你也應該能夠改變方向或停止,只停止你自己的運動,所以你仍然會受到物理學的影響。


所以我需要應用恆定的力量,在下一步之後仍然可以訪問(和可移動)。
我可以用Box2D來做這個嗎?
- 如果是,如何?
- 如果否,可以執行此操作的任何其他庫?我並不需要像這樣的密度和東西,圖像中的用例幾乎是我所需要的(+碰撞檢測)。

image for visualization

* A磁體將是一個身體不斷拉其他機構在一定範圍內,以本身
* Kockback也只是一個簡單的脈衝或與物體的射彈的碰撞。



編輯:如果你知道綁定以撒的,多數民衆贊成在還挺物理學我的目標。

+0

我會叫'applyForceToCenter()'根據磁鐵的距離和方向每次迭代在實體上。 –

回答

2

組,其中磁體具有自己的影響力的距離:

float magnetRadius = 30; 

設置磁鐵的吸引力:

float magnetForce = 400; 

獲取播放器和磁鐵的位置:

Vector2 magnetPos = magnet.getWorldCenter(); 
Vector2 playerPos = player.getWorldCenter(); 

現在計算玩家和磁鐵之間的距離:

Vector2 magnetDist = new Vector2((playerPos.x - magnetPos.x), (playerPos.y - magnetPos.y)); 
float distance = (float) Math.sqrt((magnetPos.x) * (magnetPos.x) + (magnetPos.y) * (magnetPos.y)); 

然後,如果玩家是磁鐵的半徑內,必須將力施加到他,取決於玩家的距離,感應距離:

if (distance <= magnetRadius) { 
    float vecSum = Math.abs(magnetDist.x)+Math.abs(magnetDist.y); 
    Vector2 force = new Vector2((magnetForce*magnetDist.x * ((1/vecSum)*magnetRadius/distance)), (magnetForce*magnetDist.y * ((1/vecSum)*planetRadius/distance))); 
    player.applyForceToCenter(force, true); 
} 
+0

好的,謝謝你,這意味着我仍然需要自己做很多事情。 我會嘗試你的解決方案,並接受它,如果它的作品。 我不妨上傳一個磁鐵和一些東西,一旦我創建它們的類。 – Lahzey

+0

它的工作,謝謝。雖然有些事情是錯誤的,但必須做一些編輯。 – Lahzey

+0

受磁鐵和材料影響的受控恆定運動的問題仍未得到答覆,但我會更加努力地研究這個問題,或許會爲這個主題創造一個新問題。 – Lahzey