2011-02-19 33 views
2

你最討厭現代遊戲循環?遊戲循環能夠得到改善嗎?還是隻有更好的選擇,比如事件驅動架構?最大的牛肉與遊戲循環

+2

難道是我,還是這個問題比討論更多? – 2011-02-19 12:01:13

回答

1

好像這真的應該是一個CW ...

我採取了畢業生級遊戲引擎編程課程,現在,他們正在與遊戲循環的方式堅持。當然,這並不意味着它是唯一的/最好的解決方案,但它肯定是符合邏輯的。使用循環可以確保所有遊戲系統在不請求自己的定時中斷或其他事件的情況下運行。控制可以是集中的:在我目前的項目中,我有一個GameManager類,每個幀依次循環遍歷每個註冊對象的Update(float deltaTime)函數。我不必調試事件系統或設置定時信號,我只是使用循環來調用一系列函數。沒有麻煩,沒有大驚小怪。

要回答你最討厭什麼的問題,循環方法在邏輯上適合自由使用繼承和多態,這可能會膨脹對象的大小/複雜性。如果你不小心,這可能是一個溫和的 - 可怕的陷阱。如果你很小心,這可能不是問題。

0

無論遊戲中是否存在任何事件,遊戲都應該以固定的速度吸引自己並更新它,所以我不認爲放棄遊戲循環是可能的。不過我會想知道是否有人可以想到任何其他遊戲循環的替代方案。

+0

我想知道是否有可能用事件驅動架構來替代它。但我不確定這是如何工作的。 – 2011-02-19 04:59:01

0

通常情況下,事件驅動的體系結構對遊戲最有效(只有在用戶需要完成某件事情時纔會執行某些操作)。但是,你仍然需要一個線程不斷重新繪製世界。

0

爲了完全基於事件,你可以產生一個額外的線程,它除了每x毫秒將一個CPUTick事件放入你的事件隊列中。

在JavaScript中,這通常是更自然的途徑,因爲您可以很容易地創建一個額外的'線程',通過setInterval()向您發送事件。或者,如果你已經在包含你的遊戲的框架中有一個循環 - 比如JS在瀏覽器中,或者Python已經扭曲了 - 你可以告訴循環者以固定的時間間隔回叫你。例如:

function gameLoop() { 
    // update, draw... 
} 
window.setInterval(gameLoop, 1000/fps);