2

を使用して線を描画したい場合al_draw_line(100,100,400,400,al_map_rgb(255,255,0),5);、 myALLEGRO_DISPLAYは自動的に閉じられ、この行の後のステートメントは実行されません。私のプログラムはちょうど停止します

#include<allegro5/allegro.h>
#include<allegro5/allegro_primitives.h>
int main(){
    ALLEGRO_DISPLAY *display=NULL;
    if(!al_init()){
        return -1;
    }
    if(!al_init_primitives_addon()){
        return -1;
    }
    display=al_create_display(600,600);
    al_draw_line(100,100,400,400,al_map_rgb(0,0,0),3);
    al_clear_to_color(al_map_rgb(0,0,0));
    al_flip_display();
    al_rest(20.0);
    al_destroy_display(display);
    return 0;
}
4

2 に答える 2

2

の戻り値をチェックしないでくださいal_create_display。失敗する可能性があります。とにかく:プログラムが明らかにクラッシュする理由はわかりませんが(表示をチェックしないことを除いて、コードはクラッシュするはずのことを何もしません)、次の理由で何も表示されません。

  • A)線と背景を同じ色(黒)で描画します
  • B)線を引いた後、背景色をクリアします(したがって、線を描きすぎます)。

いくつかの変更を加えた後のコード:

#include <allegro5/allegro.h>
#include <allegro5/allegro_primitives.h>
#include <stdio.h>
int main(){
    ALLEGRO_DISPLAY *display=NULL;
    if(!al_init()){
        fprintf(stderr,"Couldn't initialize allegro!\n");
        return -1;
    }
    if(!al_init_primitives_addon()){
        fprintf(stderr,"Couldn't initialize primitives addon!\n");
        return -1;
    }
    display=al_create_display(600,600);
    if(!display) {
        fprintf(stderr,"Couldn't create allegro display!\n");
        return -1;
    }
    al_clear_to_color(al_map_rgb(0,0,0));
    al_draw_line(100,100,400,400,al_map_rgb(255,0,0),3);
    al_flip_display();
    al_rest(1.0);
    al_destroy_display(display);
    return 0;
}

実際にディスプレイが壊れている場合は、少なくとも今すぐエラーメッセージが表示されるはずです。これは私にとってはうまくいきますが、なぜそれがあなたにとってうまくいかないのかわかりません(これをフルスクリーンモードで作成しようとしない限り、うまくいきません)。

于 2013-02-11T09:26:49.327 に答える