2

当我想用 画一条线时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;
}
4

2 回答 2

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

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

于 2013-02-11T09:26:49.327 回答
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));

这两行是向后的。画线后,您正在清除(擦拭)显示器。所以你从来没有真正看到这条线。

于 2015-05-10T19:36:03.570 回答