我不确定我是否完全理解您的问题,但希望这会有所帮助.. 每当要更新它所绘制的表面时更新文本而不是在更新实际文本时更新它更容易。它可能没有优化性能,但我想说在大多数情况下它更容易。
典型的程序循环将包括重新渲染表示屏幕的表面,然后是该表面的 SDL_Flip。您当然可以优化您的重新渲染,因此您只渲染自上一帧以来实际更新的内容。这可能是你正在做的事情吗?如果是这样,并且如果您使用下面的方法,您应该知道新文本仅覆盖新文本的大小,而不是整个旧文本。我通常通过先绘制一个填充的矩形然后绘制新文本来解决这个问题。
这是一个 TTF 示例,展示了在我只有一种背景颜色的简单情况下如何在表面上绘制文本(这里称为 m_Screen,它是每帧翻转到屏幕的表面):
void drawText(const char* string, int x, int y,
int fR, int fG, int fB, int bR, int bG, int bB)
{
SDL_Color foregroundColor = { fR, fG, fB };
SDL_Color backgroundColor = { bR, bG, bB };
SDL_Surface* textSurface = TTF_RenderText_Shaded(m_Font, string,
foregroundColor,
backgroundColor);
SDL_Rect textLocation = { x, y, 0, 0 };
SDL_BlitSurface(textSurface, NULL, m_Screen, &textLocation);
SDL_FreeSurface(textSurface);
}
请注意,这是在调用 drawText 之前完成的(使用一些合适的字体大小):
m_Font = TTF_OpenFont("arial.ttf", size);
这是在清理时完成的:
TTF_CloseFont(m_Font);