使用Allegro 5加载.png图像文件

时间:2012-06-08 05:38:50

标签: c++ image allegro allegro5

我正在用allegro编写游戏,并希望加载一些图像文件。但是,每当我调用al_load_bitmap时,我都会得到一个空指针。我使用XCode 4.1作为我的IDE。我会尝试使用g ++编译(如果它是一个路径问题)但是我不知道我需要做什么才能在命令行中用g ++编译它(简单地说g ++ main.cpp不起作用)。无论如何,这是我的代码:

ALLEGRO_PATH *path = al_get_standard_path(ALLEGRO_RESOURCES_PATH);

for (int i = 0; i < NUM_TILES; i++)
{
    switch (static_cast<Tile>(i)) {
        case GRASS:
            al_set_path_filename(path, "grass.png");
            tileFiles[i] = al_load_bitmap(al_path_cstr(path, '/'));
            if (!tileFiles[i])
            {
                std::cerr<<"grass.png not initialized"<<std::endl;
            }
            break;
        case DIRT:
            al_set_path_filename(path, "dirt.png");
            tileFiles[i] = al_load_bitmap(al_path_cstr(path, '/'));
            if (!tileFiles[i])
            {
                std::cerr<<"dirt.png not initialized"<<std::endl;
            }
            break;
        default:
            std::cerr 
                << "Missing case statement for datatype Tile numbered at " 
                << i
                << " in Board::Board (float mw, float mh, int tst)"
                << " declared in Board.cpp."
                << std::endl;
            break;
    }
}

我已经跑了:

if(!al_init_image_addon()) {
    al_show_native_message_box(display, "Error", "Error", "Failed to initialize al_init_image_addon!", 
                               NULL, ALLEGRO_MESSAGEBOX_ERROR);
    return -1;
}

我还说:

#include "allegro5/allegro_image.h"
#include "allegro5/allegro_native_dialog.h"

位于我的文件顶部。既没有grass.png,也没有dirt.png加载,它们和我的main.cpp文件在完全相同的目录中。我没有编译错误,但是当我尝试加载我的图像时,我总是得到空指针,所以当它到时间将它们绘制到显示器时,它们不显示。请帮忙!

2 个答案:

答案 0 :(得分:3)

  

既没有grass.png,也没有dirt.png加载,它们与我的main.cpp文件位于完全相同的目录中

只是一个调试提示......如果你要将al_path_cstr(path, '/')的结果输出到控制台,那么为什么呼叫失败应该非常明显。

ALLEGRO_RESOURCES_PATH是“捆绑资源”的位置,在OS X上表示可执行文件的目录。 (如果您要使用应用程序包,那么它将是该软件包的资源文件夹。)作为快速检查,只需将图像复制到正在构建可执行文件的同一目录中。

大多数IDE都有非常奇怪的目录结构,IMO。我最终会设置它,以便你建立像:

/src/main.c
/include/main.h
/obj/release
/obj/debug
/bin/game.exe
/bin/game-debug.exe
/bin/image.png

但这只是我的偏好。使用您喜欢的任何内容,但您应该再次阅读the docs,以清楚了解al_get_standard_path()显示的不同位置。

答案 1 :(得分:0)

好吧,我遇到了同样的问题,我非常肯定我正在寻找正确的目录并且该程序的资源就在那里。我使用了al_path_cstr(path,'/')和allegro的工作目录是预期的。然后我查看了资源文件大小....

我的构建目录中的所有资源都是零字节将它们复制我自己,解决了问题。我希望这对一些人有所帮助!