這實際上不是一件小事,所以一個'完整'的答案有點希望。 Here是box2d中的一輛汽車示例的鏈接。查看那位先生的demoreel(卷軸中的第三個演示是最相關的),並在他的源代碼中採用一個雄性。他的模擬比你需要完成的更先進一些,所以如果你能理解它的工作原理,那麼創建一個更簡單的版本就沒有問題。
在dougk16的box2d擴展中有很多代碼(可以理解),因此可能很難弄清楚他的汽車是如何工作的。所以這裏有一個簡單的起點:你想模擬一個可以前後移動的物體,也可以轉動。所以這是一種力量,從你的船體當前面向前方或後方延伸,並且一個力矩將使身體向左或向右轉動。這應該是你需要的東西,以獲得非常酷的東西。下面是一些僞代碼,這將是一個合理的地方開始:
if(needs_to_turn)
{
// turn_direction will either be -1 (left) or 1 (right), boat_torque can be a constant to start with, but should probably be controlled by the user
body.ApplyTorque(turn_direction * boat_torque);
}
if(needs_to_move)
{
// facing_vector should be a vector pointing in the direction the boat is facing, the boat_force could be a constant, but again should be controlled by the user
body.ApplyForce(facing_vector * boat_force);
}
我將結束我的答案與另一個link,此時相關教程。它不像dougk16的動作腳本那麼酷,但它對你來說可能更有用,因爲它是以教程格式。
您是否嘗試過使用[drag equation](http://en.wikipedia.org/wiki/Drag_equation)?橫截面積術語* A *將根據船相對於其速度的方向而改變,這應該做你想做的事。你總是可以用一些便宜的啓發式來估計* A *。 – Rahul 2012-01-15 04:14:25
@Rahul,謝謝你的提示。我已經通過一些近似技術將阻力方程式添加到代碼中(例如使用速度與船的角度來提供參考區域),我可以看到最新代碼中模擬的一些防水性,但是當似乎有一些瘋狂的運動時船與世界邊界相撞。我想在這裏尋求進一步幫助之前弄清楚什麼是錯誤的。再次感謝提示。 – Lukman 2012-01-20 04:05:44
一個厚臉皮的解決方法可能是創建大量小質量的非常小的圓體,以填充船周圍的空間。我還沒有在物理或處理能力方面測試過這種可行性(但是),這就是爲什麼我沒有把它作爲正確答案提交。 – Andrey 2012-02-14 12:01:16