使用.app包时无法加载图像

时间:2012-07-14 04:36:08

标签: c++ xcode macos sdl

我正在尝试使用Xcode在Mac OS X Lion中设置SDL。到目前为止,除了加载图像外,我似乎一切正常。 (使用SDL_image)我正在使用以下代码,这些代码在通过命令行编译代码而不是.app时起作用,但在此Xcode设置中不起作用。

SDL_Surface* load_image( std::string filename ) 
{
    SDL_Surface* loadedImage = NULL;
    SDL_Surface* optimizedImage = NULL;

    loadedImage = IMG_Load( filename.c_str() );

    if( loadedImage != NULL )
    {
        optimizedImage = SDL_DisplayFormatAlpha( loadedImage );
        SDL_FreeSurface( loadedImage );
    } else {
        std::cout << "Error loading image: " << filename << " Error:"<< std::endl << SDL_GetError() << std::endl;
    }

    return optimizedImage;
}

调用此函数时,我返回一个空指针,控制台说:

Error loading image: puppy.png Error:
Couldn't open puppy.png

我查看了捆绑包,并将puppy.png按预期放在Resources文件夹中。我也尝试调用load_image(“../ Resources / puppy.png”)或将puppy.png移动到MacOS文件夹中,但都没有工作。

1 个答案:

答案 0 :(得分:0)

文件的路径名是相对于当前工作目录的,这在从Xcode或Finder启动的程序中是不可预测的(在shell中,它基于您上次运行cd的任何位置)。

除非函数的文档说它在应用程序包中搜索文件名,否则你不能真正认为它会。相反,查看NSBundle类并使用这些方法自动查找位于诸如Resources之类的地方的文件的完整路径;然后在这种情况下将完整路径传递给图像加载器。