C++ 使用Allegro 5加载.png图像文件
我正在写一个游戏在快板,并想加载一些图像文件。然而,每当我调用al_load_bitmap时,就会得到一个空指针。我使用XCode 4.1作为我的IDE。我会尝试使用g++(如果是路径问题)进行编译,但是我不知道需要做什么才能在命令行中使用g++(只是g++main.cpp不起作用)。无论如何,这是我的代码:C++ 使用Allegro 5加载.png图像文件,c++,image,allegro,allegro5,C++,Image,Allegro,Allegro5,我正在写一个游戏在快板,并想加载一些图像文件。然而,每当我调用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
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;
}
}
我还提出:
#include "allegro5/allegro_image.h"
#include "allegro5/allegro_native_dialog.h"
在我档案的顶端。既不加载grass.png,也不加载dirt.png,它们与我的main.cpp文件位于完全相同的目录中。我没有得到编译错误,但当我尝试加载图像时,我始终得到空指针,因此当需要将它们绘制到显示器时,它们不会显示。请帮忙
既不加载grass.png,也不加载dirt.png,它们与我的main.cpp文件位于完全相同的目录中
只是一个调试提示。。。如果要将al_path_cstr(路径“/”)
的结果输出到控制台,那么调用失败的原因应该非常明显
ALLEGRO_RESOURCES_PATH
是“捆绑资源”的位置,在OSX上表示可执行文件的目录。(如果要使用应用程序捆绑包,那么它将是捆绑包的资源文件夹。)作为快速检查,只需将图像复制到构建可执行文件的同一目录中即可
在我看来,大多数IDE都有非常奇怪的目录结构。我最终会将其设置为这样的结构:
/src/main.c
/include/main.h
/obj/release
/obj/debug
/bin/game.exe
/bin/game-debug.exe
/bin/image.png
但那只是我的偏好。你可以随意使用,但你应该再读一遍,以清楚地了解
al_get_standard_path()
显示的不同位置。好的,我也遇到过同样的问题,我绝对肯定我在找正确的目录,并且程序的资源也在那里。我使用了al_path_cstr(路径“/”),allegro的工作目录与预期的一样。然后我查看了资源文件的大小
我的构建目录中的所有资源都是零字节将它们复制到我自己身上,它解决了问题。我希望这能帮助一些人走出困境 当图像加载失败时,也许你可以检查有什么问题?你是什么意思?检查allegro_错误?如果你按照链接,你会看到
allegro_错误
是一个字符串变量,可能包含可以打印的错误消息。编译器声称allegro_错误是一个未定义的变量,所以除非我遗漏了什么,我无法访问它或它可能包含的任何信息。allegro_error
在allegro 5中不存在。啊,我不认为我不能访问allegro_PATH类型的对象…应该先尝试一下。非常感谢你!这解决了问题。顺便提一下,我如何从终端使用g++编译allegro文件?您不能cout
一个allegro\u路径
,但可以使用al\u路径
。要编译,请参阅:
/src/main.c
/include/main.h
/obj/release
/obj/debug
/bin/game.exe
/bin/game-debug.exe
/bin/image.png