ошибка al_draw_line () в ALLEGRO

Когда я хочу нарисовать линию с помощью 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;
}

2

Решение

Вы не проверяете возвращаемое значение 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;
}

Если это на самом деле ваш дисплей, который сломан, вы должны по крайней мере получить сообщение об ошибке сейчас. Это работает для меня, хотя, и я не понимаю, почему это не должно для вас (если вы не попытаетесь создать это в полноэкранном режиме, который не будет работать).

2

Другие решения

al_draw_line(100,100,400,400,al_map_rgb(0,0,0),3);
al_clear_to_color(al_map_rgb(0,0,0));

Эти две линии назад. Вы очищаете (стираете) свой дисплей ПОСЛЕ того, как рисуете свою линию. Таким образом, вы никогда не видите линию.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector