2011-10-30 15 views
1

私はスプライトプログラミングについて学んでおり、アレグロを使用しています。サンプルプログラムの1つを実行すると、次のメッセージが表示されます。rotateprite.exeがブレークポイントをトリガーしました。これはビジュアルスタジオにありました。ブレークポイントをトリガするプログラムがあるAllegroプログラムがブレークポイントをトリガしますか?

#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私は、アレグロが

サンプルプログラムのVisual Studioの外で動作させることはできません。コードの スニペット:

  #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:\ユーザー\ジェイソン\デスクトップ\ module7 \ 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  
} 

そうでない場合は、プログラムがどこか別の場所にクラッシュすると、それはデバッグに難しくなります。

関連する問題