C++ 快板中al_draw_line()的失败

C++ 快板中al_draw_line()的失败,c++,c,allegro,allegro5,C++,C,Allegro,Allegro5,当我想用al_-draw_-line(100100400400,al_-map_-rgb(255255,0),5)画一条线时,myALLEGRO_DISPLAY自动关闭,此行后的语句不执行。我的节目暂停了 #include<allegro5/allegro.h> #include<allegro5/allegro_primitives.h> int main(){ ALLEGRO_DISPLAY *display=NULL; if(!al_init()){

当我想用
al_-draw_-line(100100400400,al_-map_-rgb(255255,0),5)画一条线时,my
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;
}
#包括
#包括
int main(){
快板显示*显示=NULL;
如果(!al_init()){
返回-1;
}
if(!al_init_primitives_addon()){
返回-1;
}
显示=al_创建_显示(600600);
al_绘制线(100100400400,al_地图_rgb(0,0,0),3);
al_clear_to_color(al_map_rgb(0,0,0));
al_flip_display();
al_rest(20.0);
铝显示器(显示器);
返回0;
}

如果不检查
al\u create\u 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;
}
#包括
#包括
#包括
int main(){
快板显示*显示=NULL;
如果(!al_init()){
fprintf(stderr,“无法初始化快板!\n”);
返回-1;
}
if(!al_init_primitives_addon()){
fprintf(stderr,“无法初始化基本体加载项!\n”);
返回-1;
}
显示=al_创建_显示(600600);
如果(!显示){
fprintf(stderr,“无法创建快板显示!\n”);
返回-1;
}
al_clear_to_color(al_map_rgb(0,0,0));
al_绘制线(100100400400,al_地图rgb(255,0,0),3);
al_flip_display();
al_rest(1.0);
铝显示器(显示器);
返回0;
}
如果实际上是您的显示器坏了,您现在至少应该得到一条错误消息。不过,这对我来说是可行的,我不明白为什么它不适合你(除非你尝试在全屏模式下创建它,这是行不通的)


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

你能给我们看更多的代码吗?你自己制作了Allegro吗?如果不是,可能二进制软件包与编译器不兼容。除非未创建显示,否则上述代码不应崩溃,但这种情况永远不会发生除非你有一个非常小的屏幕,我使用DeV C++。我成功地创建了显示,并且能够创建定时器,但是All DRAGHORLY失败了。你每一个TYMEDD都自己创建快板。如果使用DEV-C++,你可能使用GCC。如果你下载了一个预成版本的AlelGro,那么它必须精确地匹配你的GCC版本。如果没有,期待崩溃。e添加了这一行,但我的allegro显示器自动崩溃。
al_draw_line(100,100,400,400,al_map_rgb(0,0,0),3);
al_clear_to_color(al_map_rgb(0,0,0));