2014-04-18 48 views
1

我正在製作一個簡單的遊戲,就像馬里奧一樣,角色固定在一個位置,地面向左移動,給人物移動的幻覺。地面是由通過左上角和右下角定義的矩形塊的座標:在簡單的2D遊戲中實現重力

private int surfaceMatrix[][] = { 
    {0, 100, 300, 0} // block having 100 height and 300 width 
}; 

跳只是改變而移動留下的表面特徵的y座標,所以跳的樣子逆轉V信。

的代碼的其餘部分 - 動畫,移動精靈 - 非常相似,http://zetcode.com/tutorials/javagamestutorial/movingsprites/


我想跳更真實的,所以我的問題是 - 我怎麼能在這裏實現重力?我不得不使用地面上的DX,並且角色要做到這一點,那好嗎?

這裏的速度會是什麼?像素每秒...?

如何做到這一點?

+0

你現在跳躍時如何計算角色的高度?它是基於像素嗎?如果是的話,你如何支持不同的決議?我假設你計算出相對於地面的位置,然後根據實際分辨率進行最終計算。如果是這樣的話,那麼隨着時間的推移,重力僅僅是一個比高度1更復雜的下降函數。 – nablex

+0

嗯,現在分辨率是固定的,人物的高度也是如此。 – khernik

+0

如果您不計算像素本身,但使用相對高度,則允許更改分辨率是微不足道的。但是如果你使用的是固定分辨率,你知道他跳得有多高(比如說50個像素),我假設你在他摔倒的時候多次抽出他,目前使用固定的時間間隔(比如5px,這取決於你的刷新率)默認情況下一個稍微複雜一些的方法來計算實際的下降,而不是固定的5px,比如說「5px +(iteration * 5px)」,當然這太簡單了,但是你明白了這個想法 – nablex

回答

2

讓我們來看看:以像素爲單位你的性格

g = 9.8 meters/second 

採取高度和它相匹配的平均身高的人,說身高1.7米左右。

然後使用重力式:

y = y0 - g * t^2/2 

其中是像素/秒。

+0

我可以看到兩個問題。在這裏,計時器的毫秒數乘以10^3並且y必須在這裏漂浮,所以我應該圍繞它嗎? – khernik

+1

@ user3486978它是presudo-code,而不是Java。但是,你應該圍繞它。至於時間 - 不管你想要什麼(例如用System.currentTimeMillis())來測量它,然後轉換爲秒。 –