将Int转换为char *并在屏幕上显示

时间:2013-01-02 00:07:33

标签: c++ sdl sdl-ttf

当我在屏幕上绘图时,我想为游戏分数显示动态文本区域。唯一的问题是,当我重绘屏幕时,它不会使用新的分数值更新,并且在零之后也会出现乱码。我要做的是存储一个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);

1 个答案:

答案 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);