2013-02-11 3 views
2

Lorsque je veux tracer une ligne en utilisant al_draw_line(100,100,400,400,al_map_rgb(255,255,0),5);, mon ALLEGRO_DISPLAY se ferme automatiquement et les instructions après que cette ligne ne s'exécute pas. Mon programme arrête justeéchec de al_draw_line() dans 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

pourriez-vous nous montrer plus de code? – Default

+0

Avez-vous construit Allegro vous-même? Sinon, peut-être que le paquet binaire est incompatible avec votre compilateur. Le code ci-dessus ne devrait pas planter, à moins que l'affichage ne soit pas créé, mais cela ne devrait jamais arriver (sauf si vous avez un très petit écran <600x600). – Matthew

+0

J'utilise dev C++. Je crée avec succès l'affichage et capable de créer le minuteur mais al_draw_line échoue à chaque fois –

Répondre

2

Vous ne vérifie pas la valeur de retour de al_create_display, qui peut échouer. Quoi qu'il en soit: Je ne sais pas pourquoi votre programme se bloque apparemment (votre code ne fait rien qui devrait tomber en panne, en dehors de ne pas vérifier l'affichage), mais vous ne verrez rien parce que vous:

  • A) dessiner B) effacer la couleur d'arrière-plan après tracer la ligne (la surligner).

Votre code après avoir fait quelques changements:

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

Si c'est en fait votre écran qui est cassé, vous devriez au moins obtenir un message d'erreur maintenant. Cela fonctionne pour moi bien, et je ne vois pas pourquoi cela ne devrait pas pour vous (sauf si vous essayez de créer cela en mode plein écran, ce qui ne fonctionnera pas).

+0

monsieur j'ai ajouté cette ligne mais mon accident d'affichage d'allegro automatiquement. –

+0

et les arrêts de programme –

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

Ces deux lignes sont à l'envers. Vous effacez (effacez) votre affichage APRÈS que vous dessinez votre ligne. Donc, vous ne voyez jamais la ligne.