2013-10-19 37 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(显示)) 添加到主。