如何在SDL 2.0中清除部分屏幕

时间:2013-11-06 16:19:21

标签: c++ sdl sdl-2 2d-games

所以,目前我正在写一个游戏,我有一个小的纹理(20x20)填充屏幕(1680x1050)。我的玩家在这个背景上移动,全部在游戏循环中。我需要我的背景是静态的并且只绘制一次,但是SDL_RenderClear会重绘所有区域,这会导致滞后。如何绘制一次,然后用我的播放器数字更新它?

2 个答案:

答案 0 :(得分:2)

真的没办法“画一次,就这样” 但是有一种方法可以让你只绘制一部分以获得相同的结果,只需在绘制新角色之前绘制角色所在的背景部分。

在更多细节中,绘制英雄所触及的所有“块”,即使是一点点,然后将你的英雄吸引过来。

以下是一个例子:

//LocationX is the location of hero on the X axis
//LocationX /20 is the number of the first texture that is drawn on X axis
//LocationX +Width (width of hero) +20 (width of texture) this is the number of the last texture on X axis

//Now draw everything from first to last texture that is touched the hero (just calculate the Y axis the same way as X axis!)
for (int xxx = LocationX /20; xxx < LocationX +Width + 20; xxx++)
{
    for (/*Do the same for Y axis*/)
    {
        draw(texture, xxx *20, yyy *20);
    }
}
//Draw Hero here, the background is clear!

答案 1 :(得分:0)

直接回答,您应该使用SDL_RenderDrawRect来“清除屏幕的一部分”。

但是,你已经提到你在背景上有纹理 - RenderClear不会绘制纹理,所以这个描述中的某些内容似乎是错误的。