当我在屏幕上绘图时,我想为游戏分数显示动态文本区域。唯一的问题是,当我重绘屏幕时,它不会使用新的分数值更新,并且在零之后也会出现乱码。我要做的是存储一个int,让玩家得分并增加int并重新绘制屏幕上的新值。
void drawText(SDL_Surface* screen,
char* string,
int posX, int posY)
{
TTF_Font* font = TTF_OpenFont("ARIAL.TTF", 40);
SDL_Color foregroundColor = { 255, 255, 255 };
SDL_Color backgroundColor = { 0, 0, 0 };
SDL_Surface* textSurface = TTF_RenderText_Shaded(font, string,
foregroundColor, backgroundColor);
SDL_Rect textLocation = { posX, posY, 0, 0 };
SDL_BlitSurface(textSurface, NULL, screen, &textLocation);
SDL_FreeSurface(textSurface);
TTF_CloseFont(font);
}
char convertInt(int number)
{
stringstream ss;//create a stringstream
ss << number;//add number to the stream
std::string result = ss.str();//return a string with the contents of the stream
const char * c = result.c_str();
return *c;
}
score = score + 1;
char scoreString = convertInt(score);
drawText(screen, &scoreString, 580, 15);
答案 0 :(得分:3)
关于乱码输出,这是因为您使用地址运算符(convertInt
)将您从&
收到的单个字符用作字符串。该单个字符后的内存中的数据可能包含任何内容,并且很可能不是特殊的字符串终止符。
为什么要从字符串中返回单个字符?使用例如std::to_string
并返回整个std::string
,或继续使用std::stringstream
并从中返回正确的字符串。
对于未更新的号码,可能是您有一个多位数字,但您只返回第一个数字。如上所述,返回字符串,并在std::string
的调用中继续使用drawText
,它可能会更好。
由于您似乎不允许更改drawText
功能,请使用以下内容:
score++;
// Cast to `long long` because VC++ doesn't have all overloads yet
std::string scoreString = std::to_string(static_cast<long long>(score));
drawText(screen, scoreString.c_str(), 580, 15);