Как я могу получить причину ошибки в 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();