2013-12-23 108 views
0

作爲一名學生,我一直想成爲一名遊戲開發人員。到目前爲止,我已經學會了C++和SFML 2.1的基礎知識。當我決定製作2D RPG遊戲時,我遇到了一個問題,即遊戲循環刷新得太快,以至於如果我移動他們每幀1個像素,精靈將移動得比我想要的更快。C++&SFML順利移動精靈

我實現了一個幀確定的移動系統(不知道它叫什麼),無論fps是什麼,角色都以相同的速度移動。

但是,我無法解決問題(這是我問),精靈不會順利移動。我的構建中發生的事情是,播放器每幀將移動大約1px,並且可能被其他輸入中斷。我怎樣才能做到這一點?

TL; DR:我想移動像老派RPG遊戲那樣的精靈,順利移動預定像素(或瓷磚)。

+3

您可能在gamedev.stackexchange.com上運氣更好。 –

+0

您通常希望運動基於時間,而不是框架。 –

+0

想想現實生活中速度的測量:距離除以時間。位移就是速度乘以時間。那麼,你可以在你的遊戲中對運動進行建模。當您設置對象的速度時,將其設置爲「每秒像素數」等單位,並在計算對象移動的距離時,將速度乘以自上次更新以來獲得位移所用的時間。 –

回答

0

您的循環每秒可以處理的次數將在統計上是隨機的。計算機上還有很多事情要做,而且程序給出的時間也不能保證不變。你需要根據你的運動時間。

在SFML我喜歡

window.setFramerateLimit(60); 

這會給我以每秒60幀的一個很好的嘗試。它與現實非常接近,無法區分眼睛。

從那裏我喜歡假定每個幀將收到

float timeStep = 1.0f/60.0f. 

我用這個時間步長來控制動作。所以如果我想讓我的車每秒鐘驅動10個像素,那麼在大型遊戲循環的每次迭代中,我們都會使用時間步。

currentPosition += carSpeed * timeStep