2016-11-01 5 views
0

SDL2에서 빨간색으로 열리는 창이 생성되었습니다. 몇 초 후에 색이 바뀌고 창이 열리는 한 계속 변경하는 창이 필요합니다. 따라서 창은 빨간색으로 열리고 5 초 동안 머무르며 5 초 동안 초록색이되고 5 초 동안 파란색으로 변한 다음 빨간색으로 다시 돌아가서 전체 과정을 다시 시작합니다.창이 시간이 지남에 따라 색상이 바뀝니다. SDL2에서

int WindowOpen() { 

bool quit = false; 

SDL_Window *window;     // Declare a pointer 

SDL_Init(SDL_INIT_VIDEO);    // Initialize SDL2 

             // Create an application window with the following settings: 
window = SDL_CreateWindow(
    "My SDL2 window",     // window title 
    SDL_WINDOWPOS_UNDEFINED,   // initial x position 
    SDL_WINDOWPOS_UNDEFINED,   // initial y position 
    640,        // width, in pixels 
    480,        // height, in pixels 
    SDL_WINDOW_OPENGL     // flags - see below 
    ); 

SDL_Renderer *renderer = NULL; 
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); 
SDL_Event* MainEvent = new SDL_Event(); 
SDL_RenderClear(renderer); 

// Up until now everything was drawn behind the scenes. 
// This will show the new, red contents of the window. 
SDL_RenderPresent(renderer); 

// Check that the window was successfully created 
if (window == NULL) { 
    // In the case that the window could not be made... 
    printf("Could not create window: %s\n", SDL_GetError()); 
    return 1; 
} 

SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);//red. Was testing to see if window would open red and change to green then blue but this doesn't work. 
//SDL_Delay(3000); 
//SDL_SetRenderDrawColor(renderer, 300, 150, 0, 155);//green 
//SDL_Delay(3000); 
//SDL_SetRenderDrawColor(renderer, 129, 150, 500, 105);//blue 

while (quit == false && MainEvent->type != SDL_QUIT) { //While quit is false, run window and renderer. 
    SDL_PollEvent(MainEvent); 
    SDL_RenderClear(renderer); 
    SDL_RenderPresent(renderer); 
} 


// The window is open: could enter program loop here (see SDL_PollEvent()) 

//SDL_Delay(3000); // Pause execution for 3000 milliseconds, for example 

// Close and destroy the window 
SDL_DestroyWindow(window); 
SDL_DestroyRenderer(renderer); 
delete MainEvent; 

// Clean up 
SDL_Quit(); 

}

답변

0

SDL_SetRenderDrawColor 단지 당신이에 요구한다면, 렌더러, 페인트 것 색상을 설정하는 것입니다. 해당 색으로 백 버퍼를 채우려면 SDL_RenderClear을 따라야합니다. 백 버퍼가 가득차면 화면에 그려야하는데 SDL_RenderPresent으로 전화해야합니다.

while (quit == false && MainEvent->type != SDL_QUIT) { //While quit is false, run window and renderer. 
    SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);//red. Was testing to see if window would open red and change to green then blue but this doesn't work. 
    SDL_RenderClear(renderer); 
    SDL_RenderPresent(renderer); 
    SDL_Delay(3000); 
    SDL_SetRenderDrawColor(renderer, 300, 150, 0, 155);//green 
    SDL_RenderClear(renderer); 
    SDL_RenderPresent(renderer); 
    SDL_Delay(3000); 
    SDL_SetRenderDrawColor(renderer, 129, 150, 500, 105);//blue 
    SDL_RenderClear(renderer); 
    SDL_RenderPresent(renderer); 
    SDL_Delay(3000); 

    SDL_PollEvent(MainEvent); 
} 

주 루프를 원하는 것과 비슷하지만 지연 시간은 3 초입니다. 또한이 방법으로 메인 루프를 실행하는 데 9 초가 걸리므로 종료를위한 이벤트 처리가 최대 9 초가 걸릴 수 있습니다. 이것은별로 좋지는 않지만 그것을 고정시키는 것은 독자의 연습 과제로 남겨 두었습니다.

관련 문제