C++ 如何在SDL中刷新屏幕(SDL#U RenderClear不工作)?

C++ 如何在SDL中刷新屏幕(SDL#U RenderClear不工作)?,c++,sdl,codeblocks,sdl-2,C++,Sdl,Codeblocks,Sdl 2,我试图用代码块和SDL编写一个简单的程序,每秒钟改变一个矩形的高度。到目前为止,我的代码是: ''' #包括 #包括 #包括 #包括 int main(int argv,char**args) { SDL_窗口*p; SDL_渲染器*w; p=SDL_CreateWindow(“临时”),SDL_WINDOWPOS_未定义, SDL_窗口位置未定义,800640,显示SDL_窗口); w=SDL_CreateRenderer(p,-1,SDL_RENDERER_加速); SDL_SetRende

我试图用代码块和SDL编写一个简单的程序,每秒钟改变一个矩形的高度。到目前为止,我的代码是:

'''

#包括
#包括
#包括
#包括
int main(int argv,char**args)
{
SDL_窗口*p;
SDL_渲染器*w;
p=SDL_CreateWindow(“临时”),SDL_WINDOWPOS_未定义,
SDL_窗口位置未定义,800640,显示SDL_窗口);
w=SDL_CreateRenderer(p,-1,SDL_RENDERER_加速);
SDL_SetRenderDrawColor(w,255,0,0255);
SDL_Rect Rect={220140200200};
//int rectX=220;
//int-rectY=140;
//整数宽度=200;
//整数高度=200;
bool isRunning=true;
SDL_事件;
int lastTime=0;
int currentTime=0;
同时(正在运行)
{
//时间的东西
currentTime=SDL_GetTicks();
int时差=当前时间-上次时间;
如果(当前时间>上次时间+1000)
{
lastTime=当前时间;
高度=200;
}
//检查窗口是否关闭
while(SDL_事件和事件))
{
if(event.type==SDL\u QUIT)
{
isRunning=false;
}
if(event.type==SDL\u KEYUP&&event.key.keysym.sym==SDLK\u ESCAPE)
{
isRunning=false;
}
}
//长方形填充物
SDL_SetRenderDrawColor(w,255,0,0255);
int newHeight=高度+时差/4;
Rect={220140200,newHeight};
SDL_RenderFillRect(w,&Rect);
SDL_呈现(w);
SDL_延迟(10);
}
SDL_(w);
SDL_(p);
SDL_退出();
返回0;
}
'''

每次它通过循环时,之前制作的矩形仍然存在。此外,我还尝试了
SDL_RenderClear
,但当它这样做时,整个屏幕就会变成红色。我该如何解决这个问题?我只希望它每次都能刷新


另外,我知道前面的矩形之所以保留下来,是因为我用一个有线矩形进行了尝试,结果更明显。

您的
SDL_Init()
调用在哪里?窗口或渲染器指针是否为空?
RenderClear
使用当前绘制颜色清除渲染目标;必须使用
SetRenderDrawColor
设置所需的清晰(背景)颜色,然后清除。当然,在渲染矩形之前,您需要再次使用
SetRenderDrawColor
指定矩形的颜色。
#include <SDL2/SDL.h>
#include <stdio.h>
#include <iostream>
#include <string>

int main(int argv, char** args)
{
    SDL_Window *p;
    SDL_Renderer *w;

    p = SDL_CreateWindow("Temp",SDL_WINDOWPOS_UNDEFINED,
        SDL_WINDOWPOS_UNDEFINED,800,640,SDL_WINDOW_SHOWN);
    w = SDL_CreateRenderer(p, -1, SDL_RENDERER_ACCELERATED);

    SDL_SetRenderDrawColor(w,255,0,0,255);
    SDL_Rect Rect = {220,140,200,200};

//    int rectX = 220;
//    int rectY = 140;
//    int width = 200;
//    int height = 200;

    bool isRunning = true;
    SDL_Event event;

    int lastTime = 0;
    int currentTime = 0;

    while(isRunning)
    {
        // time stuff
        currentTime = SDL_GetTicks();
        int timeDifference = currentTime - lastTime;
        if(currentTime > lastTime + 1000)
        {
            lastTime = currentTime;
            height = 200;
        }
        // Check if window closes
        while ( SDL_PollEvent(&event))
        {
            if ( event.type == SDL_QUIT)
            {
            isRunning = false;
            }

            if ( event.type == SDL_KEYUP && event.key.keysym.sym == SDLK_ESCAPE)
            {
            isRunning = false;
            }

        }
        // rectangle stuff
        SDL_SetRenderDrawColor(w,255,0,0,255);
        int newHeight = height + timeDifference / 4;
        Rect = {220,140,200,newHeight};

        SDL_RenderFillRect(w, &Rect);
        SDL_RenderPresent(w);
        SDL_Delay(10);

    }

    SDL_DestroyRenderer(w);
    SDL_DestroyWindow(p);
    SDL_Quit();
    return 0;
}