如何获取 Allegro 中的错误原因?
How do I get the error reason in 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() 这样的东西会很棒)。我怎么知道发生了什么?
是文件范围内的变量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();
我来自 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() 这样的东西会很棒)。我怎么知道发生了什么?
是文件范围内的变量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();