сбой 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;
}

person Vishal Gaur    schedule 11.02.2013    source источник
comment
не могли бы вы показать нам еще немного кода?   -  person Default    schedule 11.02.2013
comment
Вы сами строили Аллегро? Если нет, возможно, бинарный пакет несовместим с вашим компилятором. Приведенный выше код не должен давать сбой, если только дисплей не создан, но этого никогда не должно произойти (если только у вас не очень маленький экран ‹600x600).   -  person Matthew    schedule 12.02.2013
comment
я использую dev С++. Я успешно создаю дисплей и могу создать таймер, но al_draw_line каждый раз терпит неудачу   -  person Vishal Gaur    schedule 12.02.2013
comment
Вы сами строили Аллегро? Если вы используете Dev-C++, вы, вероятно, используете gcc. Если вы загрузили готовую версию Allegro, она должна точно соответствовать вашей версии gcc. Если нет, ждите сбоев.   -  person Matthew    schedule 12.02.2013


Ответы (2)


Вы не проверяете возвращаемое значение al_create_display, это может привести к ошибке. В любом случае: я не знаю, почему ваша программа, по-видимому, дает сбой (ваш код не делает ничего, что должно было бы сбой, за исключением проверки дисплея), но вы ничего не увидите, потому что вы:

  • А) нарисуйте линию и фон одним цветом (черным)
  • 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;
}

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

person Cubic    schedule 11.02.2013
comment
сэр, я добавил эту строку, но мое отображение аллегро автоматически вылетает. - person Vishal Gaur; 11.02.2013

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

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

person HellfireXP    schedule 10.05.2015