Когда я хочу нарисовать линию с помощью al_draw_line(100,100,400,400,al_map_rgb(255,255,0),5);
мой ALLEGRO_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;
}
Вы не проверяете возвращаемое значение al_create_display
, что может потерпеть неудачу. В любом случае: я не знаю, почему ваша программа, по-видимому, дает сбой (ваш код не делает ничего, что должно произойти, кроме проверки дисплея), но вы ничего не увидите, потому что вы:
Ваш код после внесения некоторых изменений:
#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;
}
Если это на самом деле ваш дисплей, который сломан, вы должны по крайней мере получить сообщение об ошибке сейчас. Это работает для меня, хотя, и я не понимаю, почему это не должно для вас (если вы не попытаетесь создать это в полноэкранном режиме, который не будет работать).
al_draw_line(100,100,400,400,al_map_rgb(0,0,0),3);
al_clear_to_color(al_map_rgb(0,0,0));
Эти две линии назад. Вы очищаете (стираете) свой дисплей ПОСЛЕ того, как рисуете свою линию. Таким образом, вы никогда не видите линию.