2014-12-17 3 views
1

나는이 간단한 SDL 코드를 가지고있다.SDL 창이 표시되지 않습니까?

#include <iostream> 
#include <SDL2/SDL.h> 
#include <SDL2_image/SDL_image.h> 

using namespace std; 

int main(int argc, char * argv[]){ 

if (SDL_Init(SDL_INIT_EVERYTHING) != 0){ 
    return 1; 
} 

SDL_Window * win = SDL_CreateWindow("Window", 0, 0, 1920, 1080, SDL_WINDOW_FULLSCREEN_DESKTOP); 

if(win == nullptr){ 
    return 1; 
} 


SDL_Quit(); 
return 0; 
} 

이 중 아무 것도 창을 표시하지 않습니다. 오류가 모두 선택되었습니다. 이전에는 작동했지만 이제는 열리고 닫힙니다. 그게 도움이된다면 Xcode를 사용하고 있습니다.

+3

음, 그래. SDL_Quit을 즉시 호출하고 메인 루프가 없습니다. –

+0

네,하지만 메인 루프에는 나타나지 않습니다. –

+0

@anoyd_bi_me_grammers 그래서'SDL_Quat()'바로 위의'while (true) {}'를 치면 윈도우가 보이지 않습니까? – BWG

답변

3

다른 상태와 마찬가지로 프로그램이 즉시 종료되므로 창이 일시적으로 "깜박"해야합니다.

SDL_Window *win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN); 
if (win == nullptr){ 
    std::cout << "SDL_CreateWindow Error: " << SDL_GetError() << std::endl; 
    SDL_Quit(); 
    return 1; 
} 

SDL_Delay(2000); 

SDL_DestroyWindow(win); 
SDL_Quit(); 

을 그리고 SDL_DestroyWindow 전화를 기억 : 당신은 창 SDL_Delay를 사용하여 몇 초 동안 표시 할 수 있습니다.


while(true) {} 루프는 프로그램이 정지되도록합니다. 이벤트를 청취 할 수 있도록 다음과 같은 것을 원할 것입니다. 그리고 여유 시간에 창을 닫을 수 있습니다.

SDL_Event e; 
bool quit = false; 
while (!quit){ 
    while (SDL_PollEvent(&e)){ 
     if (e.type == SDL_QUIT){ 
      quit = true; 
     } 
     if (e.type == SDL_KEYDOWN){ 
      quit = true; 
     } 
     if (e.type == SDL_MOUSEBUTTONDOWN){ 
      quit = true; 
     } 
    } 
} 
+0

감사합니다.하지만 while (true) {}가 가끔 작동하지 않는 이유는 SDL_Quit() 전에 배치하기 때문입니다. –

+0

@anoyd_bi_me_grammers가 수정되었습니다. –

+0

감사합니다. 더 이상 반응이없고 사라지는 창은 없습니다. –

관련 문제