2015-07-12 6 views
2

Работает на клон клон. Имеют серьезные проблемы с попыткой отобразить оценку на экране. Многие вещи, которые я нашел, используют изображения, но я просто хочу использовать текст для отображения номера счета. Я пытаюсь использовать библиотеку SDL TTF для загрузки шрифта и отображения его, но он будет отображаться неправильно. Я нашел этот вопрос How to blit Score on screen in SDL? и ответ сказал использовать SDL_BlitSurface(), который я попробовал, и я только что получил сообщение об ошибке сборки (при условии, что я делал это правильно)SDL показать оценку на экране

Вот функции я называю для рисования счет:

void Pong::drawScore(){ 
    leftScoreChar = leftScore; 
    rightScoreChar = rightScore; 

    SDL_Color text_color = {255, 255, 255}; 

    score = TTF_RenderText_Solid(font, 
           &leftScoreChar, 
           text_color); 

    score2 = TTF_RenderText_Solid(font, 
           &rightScoreChar, 
           text_color); 

    leftScoreText = SDL_CreateTextureFromSurface(renderer, score); 
    rightScoreText = SDL_CreateTextureFromSurface(renderer, score2); 

    SDL_RenderCopy(renderer, leftScoreText, NULL, &scoreA); 
    SDL_RenderCopy(renderer, rightScoreText, NULL, &scoreB); 
} 

что при запуске выводит этот: https://goo.gl/dZxDEa

Aplogies, я бы поместить изображение в пост, но, видимо, я не могу.

И оценка не будет отображаться, если целое число, хранящее оценку, по какой-то причине равно 1 и отображает нуль. И оценка является дефинативно увеличивающейся причиной, по которой у меня есть игра, выводящая счет на консоль, чтобы убедиться. Итак, что я делаю неправильно, что делает неправильный результат, и у меня есть что-то еще?

ответ

0

Существует несколько способов сделать это. Вы можете сделать это через SDL_Surface или SDL_Texture. Я проиллюстрирую оба. (При необходимости адаптироваться).

int fontsize = 24; 
int t_width = 0; // width of the loaded font-texture 
int t_height = 0; // height of the loaded font-texture 
SDL_Color text_color = {0,0,0}; 
string fontpath = "my font path"; 
string text = "text I want to display"; 
TTF_Font* font = TTF_OpenFont(fontpath.c_str(), fontsize); 
SDL_Texture* ftexture = NULL; // our font-texture 

// check to see that the font was loaded correctly 
if (font == NULL) { 
    cerr << "Failed the load the font!\n"; 
    cerr << "SDL_TTF Error: " << TTF_GetError() << "\n"; 
} 
else { 
    // now create a surface from the font 
    SDL_Surface* text_surface = TTF_RenderText_Solid(font, text.c_str(), text_color); 

    // render the text surface 
    if (text_surface == NULL) { 
     cerr << "Failed to render text surface!\n"; 
     cerr << "SDL_TTF Error: " << TTF_GetError() << "\n"; 
    } 
    else { 
     // create a texture from the surface 
     ftexture = SDL_CreateTextureFromSurface(renderer, text_surface); 

     if (ftexture == NULL) { 
      cerr << "Unable to create texture from rendered text!\n"; 
     } 
     else { 
      t_width = text_surface->w; // assign the width of the texture 
      t_height = text_surface->h; // assign the height of the texture 

      // clean up after ourselves (destroy the surface) 
      SDL_FreeSurface(surface); 
     } 
    } 
} 

Обратите внимание, что вы можете просто прекратить использование только одной поверхности. Однако, поскольку поверхность является программным обеспечением, текстура, возможно, лучше, поскольку она загружается в VRAM. (Подробнее здесь: Difference between surface and texture (SDL/general))

Тогда все, что вам нужно сделать, это сделать его (по аналогии с этим):

int x = 0; 
int y = 0; 
SDL_Rect dst = {x, y, t_width, t_height}; 
SDL_RenderCopy(renderer, ftexture, NULL, &dst); // renderer is a variable of the type `SDL_Renderer*` 

Наконец, помните, что порядок, в том, как вы показываете вещи вопросы!

+0

Я пробовал копировать и вставлять этот код и корректировать его для своей программы, но теперь я не получаю никакого вывода из какого-либо текста в окне при запуске. – CharlieFan39

+0

@ CharlieFan39 Вы правильно инициализировали соответствующие библиотеки? Включили ли вы 'SDL_RENDERER_ACCELERATED'? – jrd1

+0

Да, у меня есть. То, как я пытался раньше, дал мне неправильный вывод, но по какой-то причине у меня сейчас нет выхода. Я так потерялся в этом. – CharlieFan39