Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用Allegro 5加载.png图像文件_C++_Image_Allegro_Allegro5 - Fatal编程技术网

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

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

我正在写一个游戏在快板,并想加载一些图像文件。然而,每当我调用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;
    }
}
我还提出:

#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