【问题标题】:Window Changes Color Over Time In SDL2SDL2 中的窗口随时间改变颜色
【发布时间】:2016-11-01 07:11:16
【问题描述】:

我在 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();

}

【问题讨论】:

    标签: c++ colors window sdl-2


    【解决方案1】:

    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 秒。这不是很好,但修复它留给读者作为练习。

    【讨论】:

      猜你喜欢
      • 2013-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      • 1970-01-01
      相关资源
      最近更新 更多