如何在我的.app中引用hello.bmp?

时间:2012-03-08 05:56:14

标签: macos xcode

我正在关注SDL上的lazyfoo教程,我在第01课,在屏幕上获取图像,但是SDL正在给我“无法加载hello.bmp”,我无法弄清楚为什么

我在他们的网站上使用OS X,Xcode 3.2和最新版本的SDL。

我怀疑它与没有正确地将hello.bmp图像加载到Xcode有关,但是我已经按照教程进行了进一步的Googling没有产生任何有用的结果。有谁知道如何进一步解决这个问题?

编辑:它似乎与相对路径有关。仍然不确定哪个部分是错的...

编辑:我已经通过转到Project - >编辑Active Executable并更改Set工作目录到'Project Directory'现在可以工作,但我不明白为什么它不会在.app本身加载hello.bmp。我错过了什么?

编辑:下面是lazyfoo课程01的源代码,根据请求包含。这是我正在使用角色代码的代码,如果您需要有关我的XCode(版本3.2)的任何信息,请告诉我。

/*This source code copyrighted by Lazy Foo' Productions (2004-2012)
and may not be redestributed without written permission.*/

//Include SDL functions and datatypes
#include "SDL/SDL.h"

int main( int argc, char* args[] )
{
    //The images
    SDL_Surface* hello = NULL;
    SDL_Surface* screen = NULL;

    //Start SDL
    SDL_Init( SDL_INIT_EVERYTHING );

    //Set up screen
    screen = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );

    //Load image
    hello = SDL_LoadBMP( "3.app/Contents/Resources/hello.bmp" );

    //Apply image to screen
    SDL_BlitSurface( hello, NULL, screen, NULL );

    //Update Screen
    SDL_Flip( screen );

    //Pause
    SDL_Delay( 2000 );

    //Free the loaded image
    SDL_FreeSurface( hello );

    //Quit SDL
    SDL_Quit();

    return 0;
}

2 个答案:

答案 0 :(得分:0)

我发现将lesson01源代码中的“hello.bmp”替换为“X.app/Contents/Resources/hello.bmp”,其中X是XCode项目的名称,这正确地引用了应用程序即使将.app复制到桌面并在那里运行,也会构建。

另外,不要忘记将hello.bmp添加到XCode项目中。

答案 1 :(得分:0)

这是不正确的:

SDL_LoadBMP( "3.app/Contents/Resources/hello.bmp" );

您应该通过调用[[NSBundle mainBundle] pathForResource:@"hello" ofType:@"bmp"]来获取应用程序包中资源的路径,NSString将返回一个{{1}}对象,其中包含与该资源对应的文件的绝对路径。