【问题标题】:How to blit Score on screen in SDL?如何在 SDL 的屏幕上显示分数?
【发布时间】:2017-08-10 12:18:08
【问题描述】:

我一直在开发 Pong 克隆游戏。快完成了,就在我认为一切都完美的时候。 SDL_ttf.h 库似乎很痛苦。

为了简单起见,我将给出一个总体概述,而不是整个代码。 我用过-

int PlayerScore=0;
int AIScore=0;

这是在 SDL 中呈现文本的语法。

SDL_Surface *TTF_RenderText_Solid(TTF_Font *font, const char *text, SDL_Color fg);

现在,看到 const char* 文本了吗?那就是我需要在那里提供我的 PlayerScore/AIScore 的地方。 PlayerScore/AIScore 是整数类型,但它们应该是 const char* 类型。因此,经过数小时的浏览和研究,我发现有这个 sstream 库可以用来将整数转换为 const char*

我声明我的表面为 imgTxt;

SDL_Surface* imgTxt;
std::stringstream strm;
strm << PlayerScore;

...

imgTxt = TTF_RenderText_Solid( font, strm.str().c_str(), fColor );
SDL_BlitSurface(imgTxt,NULL,screen,null);

你猜怎么着?转换成功。但是我遇到了一个不同的问题,就在我擦掉表面的时候。它将分数显示为 0000000000000000000000000000 并继续运行,一段时间后字体消失并且没有任何反应。 我不知道为什么会这样,也许字符串在每个循环中都附加了分数?这是屏幕截图。

对于为什么会发生这种情况,有什么解决方案吗?任何帮助将不胜感激。提前致谢。

【问题讨论】:

    标签: c++ sdl


    【解决方案1】:

    没有看到整个代码,我不能说。它确实看起来像它想的那样。

    您是否在每个循环中创建 sstream?

    另一种方法是使用 sprintf。

    char buffer [50];
    sprintf (buffer, "%d", PlayerScore);
    

    以后

    imgTxt = TTF_RenderText_Solid( font, buffer, fColor );
    SDL_BlitSurface(imgTxt,NULL,screen,null);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-23
      • 2014-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多