2013-10-19 40 views
0

沒有事件在我的「遊戲」的工作,如果我測試應該發生的行爲本身(例如,如果我把移動功能進入循環本身或發射功能,它完美的作品),但沒有事件工作,關閉顯示屏,用esc鍵或按下X鍵,任何按鍵,什麼也看不見。快板5沒有事件工作

我無法找到我的代碼中的錯誤,任何人都可以請幫助?遊戲循環是波紋管和所有的主要功能是在這裏:http://pastebin.ca/2468619

while(!done) 
{ 
    ALLEGRO_EVENT ev; 

    al_wait_for_event(event_queue, &ev); 

    if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) 
    { 
     std::cout << "EXITING MOFO"; 
     done= true; 
    } 

    else if(ev.type == ALLEGRO_KEY_DOWN) 
    { 
     switch(ev.keyboard.keycode) 
{ 
     case ALLEGRO_KEY_ESCAPE: 
      done = true; 
      break; 
case ALLEGRO_KEY_A: 
    keys[A] = true; 
    break; 
case ALLEGRO_KEY_S: 
    keys[S] = true; 
    break; 
case ALLEGRO_KEY_D: 
    keys[D] = true; 
    break; 
case ALLEGRO_KEY_W: 
    keys[W] = true; 
    break; 
case ALLEGRO_KEY_SPACE: 
    fireWeapon(0); 
    break; 
case ALLEGRO_KEY_LEFT: 
    keys[LEFT] = true; 
    break; 
case ALLEGRO_KEY_RIGHT: 
    keys[RIGHT] = true; 
    break; 
case ALLEGRO_KEY_UP: 
    keys[UP] = true; 
    break; 
case ALLEGRO_KEY_DOWN: 
    keys[DOWN] = true; 
    break; 
case ALLEGRO_KEY_ENTER: 
    std::cout << "FUCK"; 
    fireWeapon(1); 
    break; 
} 
    } 
    else if(ev.type == ALLEGRO_KEY_UP) 
    { 
     switch(ev.keyboard.keycode) 
{ 
case ALLEGRO_KEY_A: 
    keys[A] = false; 
    break; 
case ALLEGRO_KEY_S: 
    keys[S] = false; 
    break; 
case ALLEGRO_KEY_D: 
    keys[D] = false; 
    break; 
case ALLEGRO_KEY_W: 
    keys[W] = false; 
    break; 
case ALLEGRO_KEY_LEFT: 
    keys[LEFT] = false; 
    break; 
case ALLEGRO_KEY_RIGHT: 
    keys[RIGHT] = false; 
    break; 
case ALLEGRO_KEY_UP: 
    keys[UP] = false; 
    break; 
case ALLEGRO_KEY_DOWN: 
    keys[DOWN] = false; 
    break; 
} 
    } 
    else if(ev.type == ALLEGRO_EVENT_TIMER) 
    { 
     render = true; 
     moveTank(); 
     updateBullet(0); 
     updateBullet(1); 
    } 
    if(render && al_is_event_queue_empty(event_queue)) 
    { 
     render = false; 
     //al_set_target_bitmap(back); 
     //al_clear_to_color(al_map_rgb(0,0,0)); 
     drawTank(0); 
     drawTank(1); 
     drawBullet(0); 
     drawBullet(1); 

     //setupDebris(); 
     al_flip_display(); 
     al_clear_to_color(al_map_rgb(0,0,0)); 


    } 
+0

您從不將顯示器附加到隊列中,以便解釋您爲什麼不能獲取這些事件。沒有其他東西立即跳出來。如果您設置了一些斷點,您應該能夠輕鬆地知道代碼無法運行的位置。 – Matthew

回答

0

我看着同樣的教程。 你必須 al_register_event_source(event_queue,al_get_display_event_source(顯示)) 添加到主。