2011-10-30 55 views
1

所以我正在学习sprite编程,我们正在使用allegro。当我运行其中一个示例程序时,我收到消息:rotateprite.exe触发了一个断点。这是在视觉工作室。我不能让快板外出打工的Visual StudioAllegro程序触发断点?

示例程序:

#include <allegro.h> 

#define WHITE makecol(255,255,255) 

int main(void) 
{ 
int x, y; 
float angle = 0; 
BITMAP *tank; 

//initialize program 
allegro_init(); 
install_keyboard(); 
set_color_depth(32); 
set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0); 
textout_ex(screen,font,"Rotate: LEFT/RIGHT arrow keys", 
    0,0,WHITE,0); 

//load tank sprite 
tank = load_bitmap("C:\Users\Jason\Desktop\module7\tank.bmp", NULL); 

//calculate center of screen 
//x = SCREEN_W/2 - tank->w/2; 
//y = SCREEN_H/2 - tank->h/2; 
x=SCREEN_W/2; 
y=SCREEN_H/2; 

//draw tank at starting location 
rotate_sprite(screen, tank, x, y, 0); 

//main loop 
while(!key[KEY_ESC]) 
{ 
    //wait for keypress 
    if (keypressed()) 
    { 
     //left arrow rotates left 
     if (key[KEY_LEFT]) 
     { 
      angle -= 0.1; 
      if (angle < 0) angle = 256; 
      rotate_sprite(screen, tank, x, y, itofix(angle)); 
     } 

     //right arrow rotates right 
     if (key[KEY_RIGHT]) 
     { 
      angle += 0.1; 
      if (angle > 256) angle = 0; 
      rotate_sprite(screen, tank, x, y, itofix(angle)); 
     } 

     //display angle 
     textprintf_ex(screen, font, 0, 10, WHITE, 0, 
      "Angle = %f", angle); 
    } 
} 
allegro_exit(); 
return 0; 
} 
END_OF_MAIN() 

程序触发断点:crt0msg.c从磁盘中。 代码片段:

  #ifdef _DEBUG 
     /* 
     * Report error. 
     * 
     * If _CRT_ERROR has _CRTDBG_REPORT_WNDW on, and user chooses 
     * "Retry", call the debugger. 
     * 
     * Otherwise, continue execution. 
     * 
     */ 

     if (rterrnum!=_RT_CRNL&&rterrnum!=_RT_BANNER&&rterrnum!=_RT_CRT_NOTINIT) 
     { 
      if (1 == _CrtDbgReport(_CRT_ERROR, NULL, 0, NULL,rterrs[tblindx].rterrtxt)) 
       _CrtDbgBreak(); 
     } 
     #endif /* _DEBUG */ 

回答

1

罐= load_bitmap( “C:\用户\杰森\桌面\单词数\ tank.bmp”,NULL);

由于编译器包含无效的转义字符,因此应该警告您该字符串。您应该使用双斜杠或单斜杠:

tank = load_bitmap("C:\\Users\\Jason\\Desktop\\module7\\tank.bmp", NULL); 
// or 
tank = load_bitmap("C:/Users/Jason/Desktop/module7/tank.bmp", NULL); 

后者的格式是推荐的,因为它是跨平台的。 (减去约硬编码的绝对路径全位)

最后,你真的需要检查返回代码:

if (!tank) { 
    // gracefully report error and exit  
} 

否则程序会崩溃别的地方,这将是难以调试。