C++ 如何在SDL中刷新屏幕(SDL#U RenderClear不工作)?
我试图用代码块和SDL编写一个简单的程序,每秒钟改变一个矩形的高度。到目前为止,我的代码是: '''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
#包括
#包括
#包括
#包括
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;
}