0

上記は私が抱えている問題です。私は Visual Studio 2010 を C++ で使用し、ゲーム開発用の Allegro ライブラリを使用しています。場合によっては、ボタンを押すまで、テスト プログラムが常に真っ白になるという問題があります。これを修正する方法も、何が問題なのかもよくわかりません。これは、使用されているコードとは関係がないという事実を知っています。これは、Web サイトのサンプル コードでは決して発生しなかったためです。今では、このプロジェクトで常に発生しているようです。誰かがエラー修正の可能性を教えてくれたら、とてもありがたいです。

以下はコードです:

#include <allegro5\allegro.h>
#include <allegro5\allegro_primitives.h>                //Our primitive header file

int main(void)
{
    int width = 640;
    int height = 480;

    bool done = false;
    int pos_x = width / 2;
    int pos_y = height / 2;

    ALLEGRO_DISPLAY *display = NULL;
    ALLEGRO_EVENT_QUEUE *event_queue = NULL;

    if(!al_init())                                      //initialize Allegro
        return -1;

    display = al_create_display(width, height);         //create our display object

    if(!display)                                        //test display object
        return -1;

    al_init_primitives_addon();
    al_install_keyboard();

    event_queue = al_create_event_queue();

    al_register_event_source(event_queue, al_get_keyboard_event_source());

    while(!done)
    {
        ALLEGRO_EVENT ev;
        al_wait_for_event(event_queue, &ev);

        if(ev.type == ALLEGRO_EVENT_KEY_DOWN)
        {
            switch(ev.keyboard.keycode)
            {
                case ALLEGRO_KEY_UP:
                    pos_y -= 10;
                    break;
                case ALLEGRO_KEY_DOWN:
                    pos_y += 10;
                    break;
                case ALLEGRO_KEY_RIGHT:
                    pos_x += 10;
                    break;
                case ALLEGRO_KEY_LEFT:
                    pos_x -= 10;
                    break;
            }
        }
        else if(ev.type == ALLEGRO_EVENT_KEY_UP)
        {
            if(ev.keyboard.keycode == ALLEGRO_KEY_ESCAPE)
                done = true;
        }

        al_draw_filled_rectangle(pos_x, pos_y, pos_x + 30, pos_y + 30, al_map_rgb(255,0,255));
        al_flip_display();
        al_clear_to_color(al_map_rgb(0,0,0));
    }

    al_destroy_event_queue(event_queue);
    al_destroy_display(display);                        //destroy our display object

    return 0;
}

先ほど言ったように、これはオンライン チュートリアルのサンプル コードです。

4

1 に答える 1

0

クイックフィックスは、@mythagel がコメントで言及したものとまったく同じです。

通常、Allegro ゲームでは、タイマーを作成し、一定の間隔 (たとえば、1 秒あたり 60 回) で作動させ、イベント キューに追加します。ティックするたびに、ゲームのロジックを 1 フレーム進めてから、グラフィックを再描画します (他に何もすることがない場合)。

そのため、キー イベント中に入力を直接処理する代わりに、キーが押されているか押されているかをマークするだけです。key_leftそのため、左への移動を表す変数が呼び出され、それをtruekeydown イベントと keyup イベントに設定することfalseができます。

次に、タイマー イベント ( ALLEGRO_EVENT_TIMER) で、if (key_left == true) pos_x -= 10;入力を常に 1 秒あたり正確に X 回処理するため、これにより、ゲームがすべてのコンピューターで同じ速度で実行されるようになります。

固定フレーム レートを使用しない、より高度な入力処理方法がありますが、これが最も簡単な方法であり、通常は問題なく動作します。

于 2012-10-28T23:19:08.397 に答える