2012-07-14 75 views
0

我正在嘗試使用Xcode在Mac OS X Lion中獲取SDL設置。到目前爲止,我似乎除了加載圖像之外,其他所有工作都已完成(使用SDL_image)我正在使用下面的代碼,它將在通過命令行編譯代碼時不起作用,但不會在此Xcode安裝程序中生效。使用.app軟件包時無法加載圖像

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被放在資源文件夾中預期。我也嘗試調用load_image(「../ Resources/puppy.png」)或將puppy.png移動到MacOS文件夾中,但都沒有成功。

+2

文件的路徑名與當前工作目錄相關,這在從Xcode或Finder啓動的程序中是不可預知的(在shell中,它基於上次運行'cd'的位置)。除非函數的文檔說它在應用程序包中搜索文件名,否則你不能假定它會。相反,查看'NSBundle'類並使用這些方法自動查找位於諸如「資源」之類的文件的完整路徑;然後在這種情況下將完整路徑傳遞給圖像加載器。 – 2012-07-14 04:41:14

+0

@KevinGrant謝謝!使用NSBundle解決了我的問題。如果您將其作爲回覆發佈,我會接受它。 – Cole 2012-07-14 05:05:32

+0

沒問題。我做了答案。 – 2012-07-14 05:08:39

回答

0

文件的路徑名相對於當前工作目錄而言,在從Xcode或Finder啓動的程序中(在shell中,它基於上次運行的任何地方cd)是不可預知的。

除非函數的文檔說它在應用程序包中搜索文件名,否則你不能假定它會。相反,請查看NSBundle類,並使用這些方法自動查找位於諸如Resources之類的文件的完整路徑;然後在這種情況下將完整路徑傳遞給圖像加載器。