【问题标题】:Why is SDL2 window fading out?为什么 SDL2 窗口淡出?
【发布时间】:2018-07-16 01:32:41
【问题描述】:

我想快速解决这个问题:

我编写了一个简单的程序来使用 SDL2 库。一个青色框沿着蓝色背景从左到右移动。然后窗口关闭。

问题是程序运行时窗口的颜色“淡出”。对比度显着降低,这很烦人。有时它会在盒子位于窗口中间时发生。有时当盒子到达窗口的右侧时会发生这种情况。有时它根本不会发生。这种颜色的褪色似乎是零星的和随机的。这是一个运行时问题。从理论上讲,我认为代码没有任何问题。怎么了?

#include "SDL.h"
#include <stdio.h>

#ifdef __cplusplus
  extern "C"
#endif
int main(int argc, char* argv[])
{
    SDL_Init(SDL_INIT_VIDEO);

    SDL_Window*   window = NULL;
    SDL_Renderer* renderer = NULL;

    window = SDL_CreateWindow("Boxes", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, 0);
    renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);

    SDL_Rect myBox = { 200, 150, 50, 50  };

    int go = 0;
    while (go <= 590) {
      myBox.x = go;

      SDL_SetRenderDrawColor(renderer, 0, 0, 255, 255);

      SDL_RenderClear(renderer);

      SDL_SetRenderDrawColor(renderer, 0, 255, 255, 255);

      SDL_RenderFillRect(renderer, &myBox);

      SDL_RenderPresent(renderer);

      if (go == 0)
        SDL_Delay(2000);

      SDL_Delay(100);

      go += 10;
    }

    SDL_Delay(2000);

    SDL_DestroyWindow(window);
    SDL_DestroyRenderer(renderer);

    SDL_Quit();

    return EXIT_SUCCESS;
}

【问题讨论】:

    标签: c runtime-error sdl sdl-2


    【解决方案1】:

    这是一个典型的 SDL 错误。

    您没有处理窗口接收到的事件,因此您的操作系统假定您的程序已挂起。

    在您的 while 循环内,添加以下内容:

    SDL_Event e;
    while (SDL_PollEvent(&e))
        if (e.type == SDL_QUIT)
            return 0;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 2019-05-02
      • 1970-01-01
      相关资源
      最近更新 更多