2013-02-11 2 views
2

Когда я хочу нарисовать линию, используя al_draw_line(100,100,400,400,al_map_rgb(255,255,0),5);, мой ALLEGRO_DISPLAY автоматически закрывается и инструкции после этой строки не выполняются. Моя программа просто останавливаетсбой al_draw_line() в ALLEGRO

#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; 
} 
+0

Не могли бы вы показать нам еще код? – Default

+0

Вы сами строили Аллегро? Если нет, возможно, двоичный пакет несовместим с вашим компилятором. Вышеприведенный код не должен разбиваться, если дисплей не создан, но это никогда не должно происходить (если у вас нет очень маленького экрана <600x600). – Matthew

+0

Я использую dev C++. Я успешно создаю дисплей и могу создать таймер, но al_draw_line сбой каждый раз –

ответ

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; 
} 

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

+0

сэр, я добавил эту строку, но моя авария аллегро автоматически. –

+0

и программные остановки –

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

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