我不知道我完全理解你的問題,但希望這可以幫助..更新文本時更容易,每當它的繪製表面更新,而不是更新實際文本時更新。它可能不是最優化的性能,但我想說在大多數情況下它更容易。
一個典型的程序循環將包括重新渲染表示屏幕的表面,然後是該表面的SDL_Flip。你當然可以優化你的重新渲染,所以你只渲染自上一幀以來實際更新的內容。這也許是你正在研究的嗎?如果是這樣,並且如果您使用下面的方法,則應該意識到新文本僅涵蓋新文本的大小,而不涵蓋整個舊文本。我通常先解決這個問題,首先繪製一個填充的矩形,然後繪製新的文本。
這裏是示出如何文本可以在表面(這裏稱爲m_Screen,這是表面翻轉篩選每幀)的簡單情況,其中i僅具有一個背景顏色上繪製一個TTF例如:
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);
當然,它不會消失,如果您在表面上繪圖,它會被改變。如果您需要複製,請使用SDL_CreateRGBSurface()並手動複製像素數據。 – this