代码之家  ›  专栏  ›  技术社区  ›  Galaxy

为什么SDL2窗口会淡出?

  •  0
  • Galaxy  · 技术社区  · 6 年前

    我想快速解决这个问题:

    我编写了一个简单的程序来处理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;
    }
    

    This is how it's supposed to look like.

    The color fades out!

    1 回复  |  直到 6 年前
        1
  •  3
  •   HolyBlackCat    6 年前

    这是典型的SDL错误。

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

    你的内部 while 循环,添加以下内容:

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