在我們學校,通過將遊戲構建爲課程項目來實現我們從計算機科學課程中學到的不同概念是很常見的。現在我們在我們的機器上開發了我們的遊戲,並且一切似乎都正常,遊戲速度正常,等等。現在,當我們嘗試在我們學校的計算機上測試我們的遊戲,或者當我們的教授在他自己的計算機上測試我們的遊戲時,讓我們假設他的計算機與我們開發遊戲的單位相比非常強大,遊戲速度發生了巨大變化。在大多數情況下,遊戲動畫的發生速度會比預期的快。所以我的問題是,你如何在遊戲應用程序中防止這種問題?是的,我們使用Java。在我們構建的大多數應用程序中,我們通常使用被動渲染作爲渲染技術。提前tnx!如何使不同PC上的速度(遊戲的幀速率)相同?
2
A
回答
6
你不應該依賴於你的遊戲邏輯的渲染速度。相反,要記住從遊戲中最後一個邏輯步驟到當前遊戲所花費的時間。然後,如果花費的時間超過了一定數量,則執行一個遊戲步驟(在極少數情況下,計算機如此緩慢以至於應該發生兩個步驟,您可能想要提出一個智能解決方案來確保遊戲不會不落後)。
通過這種方式,遊戲邏輯與渲染邏輯是分開的,您不必擔心遊戲更改速度,具體取決於垂直同步是打開還是關閉,或者計算機比您的速度更慢或更快。
一些僞代碼:
// now() would be whatever function you use to get the current time (in
// microseconds or milliseconds).
int lastStep = now();
// This would be your main loop.
while (true) {
int curTime = now();
// Calculate the time spent since last step.
int timeSinceLast = curTime - lastStep;
// Skip logic if no game step is to occur.
if (timeSinceLast < TIME_PER_STEP) continue;
// We can't assume that the loop always hits the exact moment when the step
// should occur. Most likely, it has spent slightly more time, and here we
// correct that so that the game doesn't shift out of sync.
// NOTE: You may want to make sure that + is the correct operator here.
// I tend to get it wrong when writing from the top of my head :)
lastStep = curTime + timeSinceLast % TIME_PER_STEP;
// Move your game forward one step.
}
0
實現可移植性的最佳方法是在繪製每個幀之間以相同的延遲發出一些Thread.sleep()命令。那麼結果將在每個系統中保持一致。由於您使用的是被動渲染,即直接在繪畫中繪製動畫,從那裏調用Thread.sleep()可能並不是最好的想法...
也許您可以更新角蛋白變量,您的動畫取決於每一對毫秒?
0
您還可以使用javax.swing.Timer
執政動畫率。這個answer中有一個簡單的例子。
2
您可能會覺得這篇文章有趣:Fix Your Timestep。
相關問題
- 1. 以相同的速度運行的Javascript遊戲循環?
- 2. CaptureOutput委託功能的運行速度與AVCaptureDevice的幀速率相同
- 3. LibGDX節奏遊戲 - 同步相機的速度與音樂
- 4. 以不同的速率
- 5. 多人遊戲:如何同步不同PC的FPS?
- 6. Android加速度計遊戲
- 7. libGDX:遊戲通用速度
- 8. 遊戲速度問題
- 9. 幀率獨立加速度
- 10. 問題如何提高遊戲速度
- 11. LibGDX在不同幀率的遊戲版本中的差異
- 12. 如何計算不同加速度的平均速度?
- 13. 遊戲是否應該只依賴幀速率?
- 14. 每秒幀速率(FPS)在Coco2d遊戲iPhone中開始下降?
- 15. SKVideoNode幀速率
- 16. Android遊戲的不同分辨率
- 17. 如何以可變的幀速率同步兩個視頻?
- 18. 爲什麼我的遊戲角色的速度在不同的電腦上有所不同?
- 19. jquery .animate不同的速度
- 20. 不同的速度淡出
- 21. Python的 - 下降速度遊戲,隨機配備指派概率
- 22. Flash瀏覽器中的Flash幀速率與Flash Player中的Flash幀速率不同
- 23. 數據速率和幀速率屬性
- 24. 如何在使用javascript製作的遊戲中提升速度?
- 25. 相同的預製實例在不同的速度
- 26. 不同比特率(時鐘速率)
- 27. Flash遊戲減速
- 28. 如何設置CCAnimation的幀速率
- 29. 估計幀速率
- 30. 創建控件來更改YouTube視頻的速度/幀速率
好的,所以我必須在一定的時間後主動/手動呈現下一個遊戲狀態。好的TNX ... – ultrajohn 2010-03-03 09:16:52
不,不一定。您在一段固定的時間後更新,但是隻要您需要,就會進行渲染。另請參閱我答案中的鏈接。 – Kylotan 2010-03-03 15:01:14
是的,這就是我的意思...我只是用錯了的話......抱歉,所以渲染遊戲圖形等,但基於當前遊戲狀態更新遊戲圖形應該在固定時間之後完成。好的tnx傢伙! – ultrajohn 2010-03-03 17:04:40