我正在用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文件在完全相同的目录中。我没有编译错误,但是当我尝试加载我的图像时,我总是得到空指针,所以当它到时间将它们绘制到显示器时,它们不显示。请帮忙!
答案 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的工作目录是预期的。然后我查看了资源文件大小....
我的构建目录中的所有资源都是零字节。 将它们复制我自己,解决了问题。我希望这对一些人有所帮助!