0

Xcode を使用して Mac OS X ライオンで 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;
}

この関数を呼び出すと、null ポインターが返され、コンソールには次のように表示されます。

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

バンドルを調べたところ、puppy.png は予想どおり Resources フォルダーに配置されています。また、load_image("../Resources/puppy.png") を呼び出すか、puppy.png を MacOS フォルダーに移動しようとしましたが、どちらも機能しませんでした。

4

1 に答える 1

0

ファイルへのパス名は、現在の作業ディレクトリに相対的であり、Xcode または Finder から起動されたプログラムでは予測できません (シェルでは、最後に実行した場所に基づいていますcd)。

関数のドキュメントに、アプリケーション バンドルでファイル名を検索することが記載されていない限り、それが実行されると実際に想定することはできません。代わりに、NSBundleクラスを確認し、これらのメソッドを使用して、Resources などの場所にあるファイルへのフル パスを自動的に見つけます。この場合、そのフル パスをイメージ ローダーに渡します。

于 2012-07-14T05:08:28.467 に答える