SDL_FillRect没有绘图?

时间:2014-03-17 22:02:57

标签: c++ graphics sdl render particle-system

我正在使用SDL在C ++中制作游戏,我想用SDL_FillRect()渲染粒子。 我玩了几个小时的代码,但无论我做什么,粒子都没有绘制。 这是我的渲染函数中的代码(我确保我实际上是在调用函数):

void Particle::Render()
{
    SDL_Rect rect;
    rect.x = x;
    rect.y = y;
    //rect.w = Particle::Particle_Size;
    //rect.h = Particle::Particle_Size;
    rect.w = 8;
    rect.h = 8;
    surface = SDL_CreateRGBSurface(SDL_SWSURFACE,8,8,32,0,0,0,0);
    if(SDL_FillRect(surface,&rect,SDL_MapRGB(surface->format,0,0,0)) != 0) printf("Error");
    //SDL_RenderCopy(renderer,texture,NULL,&rect);
}

控制台未打印“错误”,因此SDL_FillRect()成功。但是,屏幕上没有显示任何内容。 我尝试使用传入该表面的SDL_CreateTextureFromSurface()创建一个纹理,然后使用SDL_RenderCopy,它在上面的函数中被注释掉了,但是在我评论它之前它已经工作了。我想使用SDL_FillRect,所以我可以使用彩色纹理。

我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

SDL_CreateRGBSurface()功能会创建一个离屏表面。如果要绘制到屏幕,则必须绘制到SDL_GetWindowSurface()返回的曲面。

也就是说,如果您使用的是SDL 2.0。

答案 1 :(得分:1)

我认为你可以使用这个功能来做你想要的事情:

   SDL_RenderFillRect()

https://wiki.libsdl.org/SDL_RenderFillRect

您必须先设置渲染器颜色:

   SDL_SetRenderDrawColor();

我认为您还可以更新窗口表面以获得您必须工作的内容。 那将使用

   SDL_UpdateWindowSurface().

https://wiki.libsdl.org/SDL_UpdateWindowSurface?highlight=%28%5CbCategoryVideo%5Cb%29%7C%28CategoryEnum%29%7C%28CategoryStruct%29

希望它有所帮助!