2013-07-08 2 views
-3

간단한 SDL 응용 프로그램을 만들고 있지만, 어떤 이유로 내 창이 멈추지 않고 프로그램이 중단됩니다. 코드는 다음과 같습니다.내 SDL 응용 프로그램 창이 튀어 나와 즉시 사라집니다.

bool CApp::onInit() { 
    if(SDL_Init(SDL_INIT_EVERYTHING) < 0) 
     return false; 

    display = SDL_SetVideoMode(WIDTH, HEIGHT, BPP, SDL_HWSURFACE | SDL_DOUBLEBUF); 
    // Window pops up and disappears here. 
    if(display == nullptr) // display is NOT null 
     return false; 

    // Load the grid 
    Grid = CSurface::onLoad("Resources\\Images\\Grid.png"); 
    if(Grid == nullptr) 
     return false; // Program crashes here due to onLoad returning nullptr. 

    // Load the X mark 
    X = CSurface::onLoad("Resources\\Images\\X.png"); 
    if(X == nullptr) 
     return false; 

    // Load the O mark 
    O = CSurface::onLoad("Resources\\Images\\O.png"); 
    if(X == nullptr) 
     return false; 

    return true; 
} 

프로그램 오류가 발생한 위치를 확인하십시오.

여기에 CSurface::onLoad() 기능이 있습니다.

SDL_Surface* CSurface::onLoad(char* File) { 
    SDL_Surface* surfTemp = nullptr; // Temporary Surface 
    SDL_Surface* surfReturn = nullptr; // Return Surface 

    surfTemp = SDL_LoadBMP(File); // This returns a nullptr for some reason 

    if(surfTemp == nullptr) 
     return nullptr;  // This is the culprit for the program crashing. 

    // Optimize and free our surface. 
    surfReturn = SDL_DisplayFormat(surfTemp); 
    SDL_FreeSurface(surfTemp); 

    return surfReturn; 
} 

왜 내가 작동하지 않는지 알 수 없습니다. 전에는 효과가 있었지만 이제는 충돌합니다!

+0

왜 파일 이름에 //가 있습니까? 또한 IMG_Load (File)로 전환하면 여전히 null이 반환됩니까? 올바른 위치에 파일이 있습니까? 액세스 권한을 높여야합니까? – Chemistpp

+2

'\\'는 이스케이프 문자입니다. – Tux

답변

3

2 문제 :

1)

// Load the X mark 
X = CSurface::onLoad("Resources\\Images\\X.png"); 
if(X == nullptr) 
    return false; 

// Load the O mark 
O = CSurface::onLoad("Resources\\Images\\O.png"); 
if(X == nullptr) 
    return false; 

두 번째 체크 오히려 X.

2) 당신은 SDL_LoadBMP를 사용하여 PNG 이미지를로드하는 것보다 O 평가되어야한다. 확장자가 SDL_ImageIMG_Load을 사용해보세요. 이것이 nullptr을 반환하는 이유입니다. SDL_LoadBMP은 BMP 헤더를 예상하고 있는데, 그렇지 않습니다.

+0

왜 downvotes? –

+1

문제의 해답이 아닙니다. 그것이 도움이 되긴하지만, 제가 묻고있는 것이 아닙니다. 나는 발견을 감사한다! – Tux

+0

@Tux 답변을 수정했습니다. –

1

내 컴퓨터에서이 도구를 시험해보고 오류를 발견했다고 생각합니다.

SDL_LoadBMP를 사용하면서 PNG 파일을로드하려고합니다. 이미지는 BMP, 이외의 형식 SDL_Image 라이브러리 이미지의 다른 유형을 여는 당신에게 함수의 집합을 줄 것이다에있을 경우 SDL_LoadBMP는 Windows 비트 맵을 파일

를 지원 열 수 있습니다. http://www.libsdl.org/projects/SDL_image/

관련 문제