2011-10-21 351 views
0

我正在用C++編寫一個遊戲,使用allegro 5. Allegro 5的事件堆積在一個事件隊列中(如鼠標點擊或在1/FSP時間後打上計時器)。所以我的問題是如何應該是我的遊戲主循環的邏輯,或者因爲它是基於事件的,我可以在沒有主循環的情況下實現它?遊戲主循環邏輯

任何想法如何真正的遊戲做到這一點?鏈接將會很好。

+0

@Vlad:如果是基於事件的,那麼你需要一個主循環來分發事件。 –

+2

http://gamedev.stackexchange.com/questions/651/tips-for-writing-the-main-game-loop – user786653

+1

請參閱http://stackoverflow.com/faq#editing –

回答

0

我沒有與任何快板經歷太多,但邏輯是相同的。

(所謂的)真實遊戲也有遊戲循環,但不同之處在於它們使用並行工作但在不同時間間隔內的線程。例如,物理計算,人工智能,遊戲玩法,聲音渲染等都有不同的線索,因爲用戶事件通常是遊戲玩法,遊戲玩法事件在它之前被收集(如Max所示)並被消耗到下一幀(實際上有些收集在例如5幀)。

由於幀可能會變得太長,所有來自操作系統的事件都會被遊戲收集,因此這些輸入被稱爲緩衝輸入。還有一種叫做無緩衝輸入的方法,它不能工作,而是在gameloop期間在它被查詢的實例中測試它。

如果用戶輸入是非常重要的,你不想丟失任何輸入,那麼你可以使用緩衝,否則無緩衝。但是,無緩衝可能會非常棘手,特別是在調試過程中。

這裏有一些鏈接
book excerpt game engine
Game Loops on IOS

1

我沒有使用Allegro的經驗,但是當使用SFML並使用OpenGL渲染遊戲時,我自己將事件隊列輪詢爲主循環的一部分。像下面的僞代碼(但更抽象):

while(game_on) 
{ 
    auto events = poll_occured_events(); 
    for_each(events, do_somewithng_with_event); 

    render_game(); 
} 

似乎做工精細那麼遠,我猜類似的東西是可能的快板。事件驅動的遊戲很棘手,因爲你需要不斷更新遊戲。

你可以(可能)在另一個線程的主循環,然後事件線程和遊戲線程之間同步......