2015-06-20 48 views
1

我开始在Visual Studio 2013上使用allegro 4.4.2。我在VS上安装了两个allegro 4.4.2和5.0.10,并开始测试allegro 4.4的一些示例。 2Allegro 4.4.2在Visual Studio 2013上未处理的异常

这是我的代码:

#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的过程才能让我的电脑再次正常工作。 Here's异常的截图:

enter image description here

谁能告诉什么I'm做错了什么?

谢谢

回答

1

在这一部分botones = load_bmp("bton.bmp", NULL);你应该后添加的东西,如:

if(botones == NULL) 
    return 0; 

为了验证它是否被正确或没有加载,因为如果它不能load_bmp将返回一个NULL指针正确加载文件。当调用Pinta_botones时,函数blit被调用,其功能是将源位图的矩形区域复制到目标位图。

源位图,在这种情况下botones似乎是当blit称为截图,试图访问一个NULL参考时,这将导致问题NULL指针。

+0

非常感谢你解决了这个问题。你知道VS发生这种情况时为什么会滞后吗? –