ALLEGRO中al_draw_line()的失败

时间:2013-02-11 08:03:39

标签: c++ c allegro allegro5

当我想使用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 个答案:

答案 0 :(得分: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;
}

如果它实际上是你的显示器坏了,你至少应该得到一条错误信息。这对我有用,我不明白为什么它不适合你(除非你尝试在全屏模式下创建它,这将无效)。

答案 1 :(得分: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));

这两行是向后的。在绘制线条后,您正在清除(擦拭)显示器。所以你永远不会看到这条线。