为什么 SDL2 window 正在淡出?
Why is SDL2 window fading out?
我想快速解决这个问题:
我编写了一个简单的程序来使用 SDL2 库。一个青色框沿着蓝色背景从左到右移动。然后 window 关闭。
问题是 window 的颜色 "fades out" 而程序是 运行ning。对比度显着降低并且很烦人。有时当框位于 window 的中间时会发生这种情况。有时当盒子到达 window 的右侧时会发生这种情况。有时它根本不会发生。这种颜色的褪色似乎是零星的和随机的。这是一个 运行 时间问题。从理论上讲,我看不到代码有任何问题。怎么了?
#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;
}
这是典型的 SDL 错误。
您没有处理 window 收到的事件,因此您的 OS 假定您的程序已挂起。
在您的 while
循环中,添加以下内容:
SDL_Event e;
while (SDL_PollEvent(&e))
if (e.type == SDL_QUIT)
return 0;
我想快速解决这个问题:
我编写了一个简单的程序来使用 SDL2 库。一个青色框沿着蓝色背景从左到右移动。然后 window 关闭。
问题是 window 的颜色 "fades out" 而程序是 运行ning。对比度显着降低并且很烦人。有时当框位于 window 的中间时会发生这种情况。有时当盒子到达 window 的右侧时会发生这种情况。有时它根本不会发生。这种颜色的褪色似乎是零星的和随机的。这是一个 运行 时间问题。从理论上讲,我看不到代码有任何问题。怎么了?
#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;
}
这是典型的 SDL 错误。
您没有处理 window 收到的事件,因此您的 OS 假定您的程序已挂起。
在您的 while
循环中,添加以下内容:
SDL_Event e;
while (SDL_PollEvent(&e))
if (e.type == SDL_QUIT)
return 0;