快板 5 没有事件工作

allegro 5 no events work

本文关键字:事件 工作 快板      更新时间:2023-10-16

如果我测试应该发生的动作本身(例如,如果我将移动函数放入循环本身或触发函数中,它就可以完美地工作),但没有事件工作,关闭显示,使用 esc 或按 X,任何按下的键,什么也看不到。

我在代码中找不到错误,有人可以帮忙吗?游戏循环是波纹管,所有的主要功能都在这里 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));

    }

我看了同样的教程。你必须添加al_register_event_source(event_queue、al_get_display_event_source(显示))到主。