2

在我的代码中,我有一个位图结构。

struct bat 
{
 float x;
 float y;
 ALLEGRO_BITMAP *bmp;
};

有一些函数可以处理加载位图并将其绘制到屏幕上。

ALLEGRO_DISPLAY *display;

bool init_display(void)
{
   puts("-- initializing display. --");
   display = al_create_display(display_width, display_height);
   if(display)
   {
     al_clear_to_color(al_map_rgb(0,0,0));
     queue = al_create_event_queue();
     al_register_event_source(queue, al_get_display_event_source(display));
     if(init_objects()){return true; puts("-- display initialized. --");}
     else return false;
   }
   else return false;
}

bool create_bat(struct bat *bat, float x_coord, float y_coord, const char *path)
{   
    puts("-- creating bat. --");
    bat->x = x_coord;
    bat->y = y_coord; 
    bat->bmp = al_load_bitmap(path);
    if(bat->bmp){puts("-- bat created. --"); return true;}
    else return false;
}

struct bat bat; 

bool init_objects(void)
{
   puts("-- initializing objects. --");
   if(al_init_image_addon())
   {
      al_set_new_bitmap_flags(ALLEGRO_MEMORY_BITMAP);
      al_set_target_backbuffer(display);
      if(!create_bat(&bat, 0, 0, "img.jpg"))
      { puts("-- creating bat failed. --"); return false;}
      puts("-- objects initialized. --"); 
      return true;
   }
else return false;
}

当我使用绝对路径加载位图或使用相对路径时,我总是得到这个输出。

-- initializing display. --
-- initializing objects. --
-- creating bat. --
-- creating bat failed. --

我究竟做错了什么?谢谢。(操作系统:Ubuntu 10.10)

4

2 回答 2

1

我认为您需要安装外部依赖项来加载 jpg 图像并将可执行文件与其链接。手册说:

以下类型内置在 Allegro 图像插件中并保证可用:BMP、PCX、TGA。每个平台还通过外部依赖项支持 JPEG 和 PNG。

看到这个:http ://alleg.sourceforge.net/a5docs/5.0.3/image.html

如果您仍然没有,您将需要libjpegand插件。libjpeg-dev在此处查找有关不同插件的一些信息:

http://wiki.allegro.cc/index.php?title=Install_Allegro5_From_SVN/Linux/Debian

于 2011-05-23T15:20:17.147 回答
0

首先,您需要确保已编译支持 JPEG 的图像插件。在 Ubuntu 上,这意味着 libjpeg-dev。使用 CMake 配置 Allegro 时,它会告诉您支持的内容。如果您不记得,请查看其日志文件。

可能有问题的另一件事是相对路径。你确定你在正确的位置?要轻松测试,请使用绝对路径,例如"/home/me/game/foo.jpg".

于 2011-05-23T16:21:13.673 回答