【问题标题】:Loading .png Image file with Allegro 5使用 Allegro 5 加载 .png 图像文件
【发布时间】:2012-06-08 05:38:50
【问题描述】:

我正在用 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,也不加载dirty.png,它们与我的main.cpp 文件位于完全相同的目录中。我没有编译错误,但是当我尝试加载我的图像时,我总是得到空指针,所以当需要将它们绘制到显示器时,它们不会显示。请帮忙!

【问题讨论】:

  • 图片加载失败,可以查看allegro_error看看有什么问题?
  • 检查 allegro_error 是什么意思?
  • 如果你点击链接,你会看到allegro_error是一个字符串变量,可能包含可以打印的错误信息。
  • 编译器声称 allegro_error 是一个未定义的变量,所以除非我遗漏了什么,否则我无法访问它或它可能包含的任何信息。
  • allegro_error 在 Allegro 5 中不存在。

标签: c++ image allegro allegro5


【解决方案1】:

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() 揭示的不同位置。

【讨论】:

  • 啊,我没想到我能找到一个 ALLEGRO_PATH 类型的对象...应该先尝试一下。不过还是非常感谢!这解决了问题。顺便说一句,我将如何从终端使用 g++ 编译 allegro 文件?
  • 您不能使用coutALLEGRO_PATH,但可以使用al_path_cstr()。编译见:stackoverflow.com/a/8703901/259778
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    相关资源
    最近更新 更多