【问题标题】:SDL_FillRect Not Drawing?SDL_FillRect 不绘图?
【发布时间】:2014-04-23 08:51:13
【问题描述】:

我正在使用 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 所以我可以有彩色纹理。

我错过了什么吗?

【问题讨论】:

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


    【解决方案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

    希望对您有所帮助!

    【讨论】:

    • 非常感谢! UpdateWindowSurface() 肯定能把我带到某个地方,我实际上可以看到一些东西!虽然颜色非常奇怪,所以我不确定我是否会使用这种方法,但 RenderFillRect() 看起来很有希望。非常感谢您的帮助!
    【解决方案2】:

    SDL_CreateRGBSurface() 函数创建一个离屏表面。如果要绘制到屏幕上,则必须绘制到SDL_GetWindowSurface() 返回的表面。

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

    【讨论】:

      猜你喜欢
      • 2017-10-26
      • 1970-01-01
      • 1970-01-01
      • 2016-10-04
      • 2011-02-24
      • 2017-05-12
      • 2012-12-18
      • 2018-09-06
      • 2018-01-09
      相关资源
      最近更新 更多