2011-10-30 46 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  
} 

否則程序會崩潰別的地方,這將是難以調試。