0

如果我测试应该发生的动作本身,则在我的“游戏”中没有任何事件起作用(例如,如果我将移动功能放入循环本身或触发功能中,它可以完美运行),但是没有任何事件起作用,关闭显示,使用 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));


    }
4

1 回答 1

0

我看了同样的教程。您必须将 al_register_event_source(event_queue, al_get_display_event_source(display)) 添加到 main。

于 2014-03-12T08:58:43.820 回答