在我的程序中,我正在绘制的内容停留在我正在绘制的屏幕上,我的意思是我在调用SDL_UpdateWindowSurface()之后保留在屏幕上的内容。这是我的代码。
void tower_manager::render()
{
m_tower.draw(camx, camy,m_screen);
//SDL_BlitSurface(test, NULL, m_screen, NULL);
SDL_Rect rect = { 32, 32, 32, 32 };
//draw the tower walls;
for (int x = 0; x < towerWidth; x++)
{
for (int y = 0; y < towerHeight * 2; y += 2)
{
rect.x = x*blockSize - camx;
rect.y = y*blockSize - camy;
SDL_BlitSurface(test, NULL, m_screen, &rect);
}
}
SDL_UpdateWindowSurface(m_window);
}
显然我需要至少10个声望才能发布图片,所以我无法发布屏幕截图,但这里有一个例子,你知道当Windows应用程序冻结并且它一遍又一遍地绘制同一个窗口时桌面会发生什么你可以画它来制作艺术品吗?这正是它在这里发生的样子。当我调用塔对象方法时,我还有另一个问题,该方法最初是使用相同的代码绘制塔,它没有绘制或做任何事情(我正在通过指针指向我在其参数中绘制的屏幕) )。
答案 0 :(得分:0)
您需要清除要绘制的曲面区域。如果不这样做,那么屏幕表面将保留以前帧中的旧渲染,并且您正在绘制它们。这会导致涂抹伪影。
这里的旧优化(不再对SDL2或OpenGL有用)是跟踪脏矩形并清除它们中的每一个,但最简单的方法是在渲染之前清除每个帧的整个表面。
所以,每帧一次做这样的事情:
SDL_FillRect(m_screen, NULL, 0x000000);