Преобразование Int в char * и отображение на экране

Когда я рисую на экране, я хочу показать динамическую текстовую область для игрового счета. Единственная проблема в том, что когда я перерисовываю экран, он не обновляется с новым значением счета, а также появляются искаженные символы, которые появляются после нуля. То, что я пытаюсь сделать, — это сохранить значение 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

Решение

Что касается искаженного вывода, это потому, что вы используете один символ, который вы получаете от 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);
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]