2012-03-08 1 views
1

저는 SDL에 대한 lazyfoo 자습서를 따르고 있으며, 01 번 이미지에서 화면에 이미지를 표시하고 있지만 SDL에서 "hello.bmp를로드 할 수 없습니다"라는 메시지를 표시하고 있는데 그 이유를 알 수 없습니다.내 .app에서 hello.bmp를 참조하는 방법은 무엇입니까?

저는 OS X, Xcode 3.2 및 최신 버전의 SDL을 웹 사이트에서 사용하고 있습니다.

hello.bmp 이미지를 Xcode에 제대로로드하지 않는 것과 관련이 있다고 생각되지만 튜토리얼을 따라 갔으며 추가로 Google 검색 결과가 도움이되지 않았습니다. 누구든지이 문제를 해결하는 방법을 알고 있습니까?

편집 : 상대 경로와 관련이있는 것으로 보입니다. 아직 어떤 부분이 틀린 지 아직 확실하지 않습니다 ...

편집 : Project -> Edit Active Executable로 이동하여 Set Working Directory를 '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; 
} 
+0

나는 이것이 속한다라고 생각한다. –

+4

스택 오버플로에서이 질문을해야하지만 코드가 없으면 상당히 빨리 닫힙니다. 코드를 편집하여 마이그레이션하십시오. – ChrisF

+0

추가 된 소스 코드, 미안, 수동으로 각 줄의 시작 부분에 4 개의 공백을 추가 할 필요없이 올바르게 형식을 지정하는 방법을 알아낼 수 없습니다. 나는 한두 줄로 그 일을하는 방법을 기억했었다. 그러나 만약 그렇다면, 이제 사라졌다. –

답변

0

이 잘못된 :

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

당신은 그 자원에 해당하는 파일의 절대 경로와 함께 NSString 객체를 반환합니다 [[NSBundle mainBundle] pathForResource:@"hello" ofType:@"bmp"]를 호출하여 응용 프로그램의 번들의 리소스의 경로를 얻어야한다.

+0

이것은 Linux에서 작동합니까? –

+0

당신의 질문은'osx' 태그가 붙어 있고 당신은 Mac app 번들 내의 파일에 접근하는 방법을 묻고 있습니다. Linux 용으로도 개발하고 있다면, 일반적인 Linux 응용 프로그램에는 문제가 전혀 적용되지 않기 때문에 현재 수행중인 작업과 사용중인 프레임 워크에 대해 더 많은 정보를 포함시켜야합니다. – Jim

0

내가 발견 한 그이 제대로 X가 Xcode 프로젝트의 이름입니다 "X.app/Contents/Resources/hello.bmp"로 lesson01 소스 코드에 "hello.bmp"를 대체하여 .app가 바탕 화면에 복사되어 실행 된 경우에도 빌드 된 응용 프로그램을 참조합니다.

또한 hello.bmp를 XCode 프로젝트에 추가하는 것을 잊지 마십시오.

+0

참고로,이 솔루션은 플랫폼과 관련이 없으므로 이상적이지 않습니다. –

관련 문제