Как я могу получить причину ошибки в Allegro?

Я пришел из SDL и там у меня была функция SDL_GetError (), которая волшебным образом возвращала const char * с внутренней ошибкой. Вот мой кусок кода на Allegro 5:

#include "game.h"

ALLEGRO_BITMAP *load_bmp(const char *s) {
    ALLEGRO_BITMAP *bmp = nullptr;
    bmp = al_load_bitmap(s);
    if (!bmp) {

        al_show_native_message_box(display,
            "Fatal Error!",
            "Failed to load: " ,
            s,
            NULL,
            ALLEGRO_MESSAGEBOX_ERROR);

        al_destroy_display(display);
        return nullptr;

    }

    return bmp;
}

ALLEGRO_BITMAP *player = load_bmp("GFX\\player_up.bmp"); 

Файл в порядке, и я могу загрузить его непосредственно из al_load_bitmap, но, поскольку я добавил свою личную функцию, Allegro аварийно завершает работу и выдает диалоговое окно с сообщением об ошибке (поэтому bmp должен быть nullptr). Проблема в том, что эта ошибка для меня абсолютно бесполезна, и мне нужно знать, что происходит внутри Allegro (поэтому что-то вроде al_get_error() было бы здорово). Как я узнаю, что случилось?

1 ответ

Решение

Переменная player в области видимости файла; другими словами, инициализируется ли он перед вашим main работает и имеет шанс инициализировать библиотеку allegro?

Предполагая, что это так, попробуйте изменить строку на

ALLEGRO_BITMAP *player = nullptr;

и инициализируйте его в функции, которую вы вызываете в соответствующее время при запуске программы, например:

void init_game_bitmaps()
{
   player = load_bmp("GFX\\player_up.bmp");
   // Other initialisation here ...
}

называя это как:

// Somewhere in main, or an appropriate function call:
init_game_bitmaps();
Другие вопросы по тегам