2011-04-21 90 views
3

好的,所以我正在嘗試爲3D XNA遊戲創建我自己的物理引擎,並且我正在計算應該通過重力來移動物體的程度。在XNA中計算重力

XNA的遊戲計時器時每16毫秒,所以有人計算過,用9.81米/ S作爲我的引力速度,你可以看到,你應該增加由具有重力的物體的速度:

0.15696米/ 16毫秒
- 基本上每個更新呼叫應增加0.15696米的對象

問題是,我如何將0.15696米轉換爲像素。顯然,如果我只使用1:1關係,對象將只移動9.81像素/秒。哪個不能真正模擬重力:P有沒有人有一個好主意,我如何確定我應該移動物體的像素數量?

感謝您的幫助!

+0

你有什麼理由創建自己的框架? – tomasmcguinness 2011-04-21 15:19:17

+0

爲了好玩:)基本上只是想獲得在Xna玩物理的經驗。 – cush 2011-04-21 15:20:54

+0

好的答案;-) – tomasmcguinness 2011-04-21 15:27:05

回答

5

雖然2D遊戲開發更像素爲中心,但3D遊戲開發並不關心像素這種東西,而是單位。單位大小是完全任意的。

通常情況下,您有一個速度矢量,其大小等於您的物體每秒的米(或英尺或??)。這樣,通過添加該速度*自上一幀以來的經過時間(16.6666毫秒),每幀更新位置。從重力加速度被添加到速度矢量以相同的方式:

Vector3 gravity = Vector3.Down * 9.81f; 


//in the update loop 
float elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds;//0.01666667 (or 16.67 ms) @ 60FPS 
velocity += gravity * elapsed; 
position += velocity * elapsed; 

在本例中,我已任意設定一個1個XNA單元== 1米。

1

你只需要弄清楚屏幕所代表的「區域」有多大;那麼它的簡單縮放。如果您有衛星軌道地球的二維圖像,那麼您的「Y」像素代表衛星接地(大約35,000米)。

從古典物理學中使用您的方程式(http://en.wikipedia.org/wiki/List_of_equations_in_classical_mechanics),然後將真實尺寸縮放到屏幕上。