【发布时间】:2016-03-05 20:52:44
【问题描述】:
我目前正在使用 for 循环沿 x 轴创建 4 个矩形。当我运行程序时,矩形的图像会出现几毫秒,然后消失。你能告诉我我必须做什么才能使图像永久显示在屏幕上吗?
当我创建单个矩形时,它会显示图像而不会消失。
举个例子会很有帮助。谢谢
int main(){
int barrack1_xposition = 167,i=1;
int cnt_barrack=0;
SDL_Window *o = NULL;
SDL_Renderer *r = NULL;
SDL_Rect bar1[4];
SDL_Event e;
SDL_Init(SDL_INIT_VIDEO);
o = SDL_CreateWindow("SPACE INVADERS",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
1024,
800,
SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE);
r = SDL_CreateRenderer(o, -1,SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
while(i)
{
while(SDL_PollEvent(&e) !=0)
{
if(e.type == SDL_QUIT)
i=0;
}
for(cnt_barrack = 0; cnt_barrack < 4; cnt_barrack++)
{
bar1[cnt_barrack].x=barrack1_xposition;
bar1[cnt_barrack].y=250;
bar1[cnt_barrack].h=50;
bar1[cnt_barrack].w=50;
barrack1_xposition += 200;
}
SDL_SetRenderDrawColor(r,255,255,255,255);
SDL_RenderFillRect(r,&bar1[0]);
SDL_RenderFillRect(r,&bar1[1]);
SDL_RenderFillRect(r,&bar1[2]);
SDL_RenderFillRect(r,&bar1[3]);
SDL_RenderPresent(r);
}
SDL_DestroyWindow(o);
SDL_DestroyRenderer(r);;
SDL_Quit();
}
【问题讨论】:
-
我建议您发布一个完整的可编译示例(通过制作它,您很可能会在代码中发现错误)。例如。在给定的 sn-p
r中永远不会设置,并且不会调用 SDL_RenderPresent。不过基本方法是正确的。 -
我发布了我的整个代码。请你看一下。
-
我认为给定示例没有问题,但是您在绘制之前没有清除渲染目标是可疑的。设置清晰的颜色(例如黑色)并在调用之前调用
SDL_RenderClear。 -
我已经完成了,但它不会留在屏幕上。你能测试我实现 SDL_RenderClear 的代码吗?
-
如果有效,请发帖。
标签: c arrays for-loop sdl-2 rect