簡體   English   中英

在不同屏幕尺寸下的精靈速度

[英]Sprite Speed on different Screen Sizes

我試圖了解支持不同屏幕尺寸(在Android中)的游戲中速度的概念。

假設我有一個Sprite,從橫向模式的右端到左端需要10秒鍾。 幀速率不穩定,因此有時會持續30秒鍾,然后突然變為10。但是我仍然希望Sprite從一端到另一端花費10秒。 我該怎么做?

final int time = 10; //time from one end to the otehr
float baseSpeedX = screenWidth / time;
float currentFrameRate = 30.0; //just as an example
float baseFrameRate    = 50.0; //the frame rate we want
float factor = baseFrameRate / currentFrameRate;
playerSpeedX += baseSpeedX * factor;

這是我的理解:
通過將屏幕寬度除以您想要從一端到另一端獲得精靈的時間,可以得到基本速度 基本速度是指如果有穩定的幀速率,則Sprite應該每秒增加到當前位置的速度。 但是,我不知道如何實現這一目標,所以我只是獲得當前幀速率,然后將基本幀速率 (我們游戲中真正想要的幀速率)相除,以獲得與基本速度相乘的因子。

如果確實可行,這將使Sprite在10秒內到達另一端,對嗎? 即使我們的幀速率為10表示2秒,然后設置為50表示8秒。 現在,幀速率越高,Sprite距離增加的越少,而幀速率越低Sprite距離增加的越高。

如果這一切都可行,那我可以在游戲中使用它嗎? 還是獲取精靈速度完全錯誤的方法?

您走在正確的軌道上

通常,在移動Sprite時,需要采取一種方法,以使fps較高時Sprite的移動速度較慢,而fps較低時Sprite的移動速度更快。 這可以通過將另一個稱為delta variable乘以baseSpeed來完成。 在這種情況下,增量是從當前幀到上一幀所花費的時間。 這樣,高fps的游戲將具有較低的增量,因為從一幀到另一幀需要花費很短的時間。 按照這種模式,低fps游戲將看到大量的增量。 通過計算增量,您可以使子畫面在不同的fps目標下具有相同的速度。 通常,您可以通過減去當前時間和上次渲染的時間來計算增量。

從理論上講,如果您使用baseSpeedX公式(乍一看似乎baseSpeedX )並將其與增量相乘,您將獲得以下速度:

double delta = currentTime - timeOfLastFrame; // I don't know specifically what time libraries there are on your platform
double speed = baseSpeedX * delta;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM