2013-02-11 101 views
2

當我想通過使用al_draw_line(100,100,400,400,al_map_rgb(255,255,0),5);畫一條線時,我的ALLEGRO_DISPLAY自動關閉,並且該行之後的語句不執行。我的計劃只是暫停ALLEGRO中的al_draw_line()失敗

#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 2013-02-11 08:07:09

+0

你自己製作Allegro嗎?如果不是,那麼二進制包可能與您的編譯器不兼容。上面的代碼不應該崩潰,除非顯示器沒有創建,但不應該發生(除非你有一個非常小的屏幕<600x600)。 – Matthew 2013-02-12 05:55:29

+0

我正在使用dev C++。我成功創建顯示並能夠創建計時器,但al_draw_line每次都失敗 – 2013-02-12 06:11:46

回答

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

先生,我已添加此行,但我的快板顯示自動崩潰。 – 2013-02-11 10:18:59

+0

和程序暫停 – 2013-02-11 10:19:46

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

這兩條線是向後的。您正在繪製線條後清除(擦除)顯示。所以你從來沒有真正看到這條線。