2012-09-03 159 views
4

我正在製作我的第一款遊戲是allegro 5,這是一款貪吃蛇遊戲。爲了移動蛇的遊戲,我想使用我製作的方格,所以蛇定期移動。allegro 5以一定的時間間隔執行活動

如何使用計時器在特定時間內發生事件?例如,我希望我的蛇每秒在方向設置中移動,我知道如何控制他,但我不知道如何創建一個以某個間隔發生的事件。我在Windows XP SP3上使用Codeblocks IDE

+1

這是爲什麼降低投票率?我在提出這個問題之前記錄了自己,我甚至嘗試過編碼,並且我可以提供代碼作爲證明。僅僅因爲一個初學者問了一些東西,在你的理論中是一個愚蠢的問題,並不意味着他很愚蠢,這隻意味着他是一個初學者,如果你能回答而不會倒下。 – Bugster

回答

6

大多數使用Allegro創建遊戲的人都使用固定間隔計時系統。這意味着每秒X次(通常爲60或100次),您將處理輸入並運行一個邏輯週期。然後,如果你有時間留下,你畫一個圖形框架。

要創建蜱在60 FPS的計時器,並與事件隊列註冊它:

ALLEGRO_TIMER *timer = al_create_timer(1/60.0); 
ALLEGRO_EVENT_QUEUE *queue = al_create_event_queue(); 

al_register_event_source(queue, al_get_timer_event_source(timer)); 

現在,在你的主事件循環的話:所以現在do_logic()

al_start_timer(timer); 
while (playingGame) 
{ 
    bool draw_gfx = false; 

    do 
    { 
    ALLEGRO_EVENT event; 
    al_wait_for_event(queue, &event); 

    if (event.type == ALLEGRO_EVENT_TIMER) 
    { 
     do_logic(); 
     draw_gfx = true; 
    } 
    else if (event.type == ...) 
    { 
     // process keyboard input, mouse input, whatever 
     // this could change the direction the snake is facing 
    } 
    } 
    while (!al_is_event_queue_empty(queue)); 

    if (draw_gfx) 
    { 
    do_gfx(); 
    draw_gfx = false; 
    } 
} 

,你可以把你的蛇一個單位朝着它的方向移動。這意味着它將每秒移動60個單位。如果您需要更多粒度,則可以使用小數單位。

您可能想看看Allegro附帶的一些演示,因爲它們具有全功能事件循環。包含一個單一的答案太多了。

+1

在獲得一個很好的答案失去希望後,我得到了這個。我不能再多謝你了,你真是太棒了,我立即接受了。謝謝! – Bugster

相關問題