1

だから私はスプライトプログラミングについて学び、アレグロを使っています。サンプルプログラムの1つを実行すると、次のメッセージが表示されます。rotatesprite.exeがブレークポイントをトリガーしました。これはビジュアルスタジオにありました。VisualStudioの外でアレグロを動作させることができません

サンプルプログラム:

 #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 */
4

1 に答える 1

1

タンク=load_bitmap( "C:\ Users \ Jason \ Desktop \ module7 \ trunk.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      
}

そうしないと、プログラムが別の場所でクラッシュし、デバッグが困難になります。

于 2011-10-31T03:59:42.990 に答える