Allegro 4.4.2 在 Visual Studio 2013 未处理的异常
Allegro 4.4.2 On Visual Studio 2013 Unhandled Exception
我在 Visual Studio 2013 年开始使用 allegro 4.4.2。我在 VS 上安装了 allegro 4.4.2 和 5.0.10,并开始测试 allegro 4.4.2 的一些示例
这是我的代码:
#include <allegro.h>
#define ANCHO 640
#define ALTO 480
int soltado = 1;
int accion = 4;
BITMAP *buffer;
BITMAP *dibujo;
BITMAP *botones;
bool Sobre_boton(){
return (mouse_x >0 && mouse_x < 64 &&
mouse_y >0 && mouse_y < 64);
};
void cambiaccion(){};
void realizaccion(){};
void Boton_izquierdo(){
if (Sobre_boton()){
cambiaccion();
}
else{
realizaccion();
}
};
void Pinta_cursor(){
circle(buffer, mouse_x, mouse_y, 2, 0x000000);
putpixel(buffer, mouse_x, mouse_y, 0x000000);
};
void Pinta_botones(){
blit(botones, buffer, 0, 0, 0, 0, 64, 64);
};
int main()
{
allegro_init();
install_keyboard();
install_mouse();
set_color_depth(32);
set_gfx_mode(GFX_AUTODETECT_WINDOWED, ANCHO, ALTO, 0, 0);
buffer = create_bitmap(ANCHO, ALTO);
dibujo = create_bitmap(ANCHO, ALTO);
botones = load_bmp("bton.bmp", NULL);
clear_to_color(buffer, 0xFFFFFF);
clear_to_color(dibujo, 0xFFFFFF);
while (!key[KEY_ESC]){
blit(dibujo, buffer, 0, 0, 0, 0, ANCHO, ALTO);
Pinta_botones();
//pulsa boton izquierdo
if (mouse_b & 1){
Boton_izquierdo();
}
else{
soltado = 1;
}
Pinta_cursor();
blit(buffer, screen, 0, 0, 0, 0, ANCHO, ALTO);
}
destroy_bitmap(botones);
destroy_bitmap(dibujo);
destroy_bitmap(buffer);
return 0;
}
END_OF_MAIN();
当我 运行 项目时,VS 开始严重滞后,以至于我必须等待 7 秒才能看到我的鼠标光标移动。我必须终止 VS 进程才能让我的电脑再次正常工作。这是异常的屏幕截图:
谁能告诉我哪里做错了?
谢谢
在这部分 botones = load_bmp("bton.bmp", NULL);
您应该在后面添加一些内容,例如:
if( botones == NULL )
return 0;
验证它是否正确加载,因为如果未能正确加载文件,load_bmp
将 return 一个 NULL
指针。当调用Pinta_botones
时,会调用函数blit
,其功能是将源位图的一个矩形区域复制到目标位图。
源位图,在本例中 botones
在调用 blit
时在屏幕截图中显示为 NULL
指针,这会在尝试访问 NULL
参考。
我在 Visual Studio 2013 年开始使用 allegro 4.4.2。我在 VS 上安装了 allegro 4.4.2 和 5.0.10,并开始测试 allegro 4.4.2 的一些示例
这是我的代码:
#include <allegro.h>
#define ANCHO 640
#define ALTO 480
int soltado = 1;
int accion = 4;
BITMAP *buffer;
BITMAP *dibujo;
BITMAP *botones;
bool Sobre_boton(){
return (mouse_x >0 && mouse_x < 64 &&
mouse_y >0 && mouse_y < 64);
};
void cambiaccion(){};
void realizaccion(){};
void Boton_izquierdo(){
if (Sobre_boton()){
cambiaccion();
}
else{
realizaccion();
}
};
void Pinta_cursor(){
circle(buffer, mouse_x, mouse_y, 2, 0x000000);
putpixel(buffer, mouse_x, mouse_y, 0x000000);
};
void Pinta_botones(){
blit(botones, buffer, 0, 0, 0, 0, 64, 64);
};
int main()
{
allegro_init();
install_keyboard();
install_mouse();
set_color_depth(32);
set_gfx_mode(GFX_AUTODETECT_WINDOWED, ANCHO, ALTO, 0, 0);
buffer = create_bitmap(ANCHO, ALTO);
dibujo = create_bitmap(ANCHO, ALTO);
botones = load_bmp("bton.bmp", NULL);
clear_to_color(buffer, 0xFFFFFF);
clear_to_color(dibujo, 0xFFFFFF);
while (!key[KEY_ESC]){
blit(dibujo, buffer, 0, 0, 0, 0, ANCHO, ALTO);
Pinta_botones();
//pulsa boton izquierdo
if (mouse_b & 1){
Boton_izquierdo();
}
else{
soltado = 1;
}
Pinta_cursor();
blit(buffer, screen, 0, 0, 0, 0, ANCHO, ALTO);
}
destroy_bitmap(botones);
destroy_bitmap(dibujo);
destroy_bitmap(buffer);
return 0;
}
END_OF_MAIN();
当我 运行 项目时,VS 开始严重滞后,以至于我必须等待 7 秒才能看到我的鼠标光标移动。我必须终止 VS 进程才能让我的电脑再次正常工作。这是异常的屏幕截图:
谁能告诉我哪里做错了?
谢谢
在这部分 botones = load_bmp("bton.bmp", NULL);
您应该在后面添加一些内容,例如:
if( botones == NULL )
return 0;
验证它是否正确加载,因为如果未能正确加载文件,load_bmp
将 return 一个 NULL
指针。当调用Pinta_botones
时,会调用函数blit
,其功能是将源位图的一个矩形区域复制到目标位图。
源位图,在本例中 botones
在调用 blit
时在屏幕截图中显示为 NULL
指针,这会在尝试访问 NULL
参考。