如何在C++ SDL中显示Pac-Man游戏的类类型分数
在SDL C++中显示类内的分数变量
你的问题核心很明确:afficherTexte函数需要接收字符串类型的文本,但你的分数是整数变量(entite.score和entite.scoreTotal),只需要把整数转换成字符串,再传给这个函数就能解决问题。下面是两种实用的实现方法:
方法1:用std::to_string快速转换(推荐)
这是最简洁的方式,C++11及以上版本支持直接用std::to_string将整数转为字符串,再拼接成你要显示的文本内容:
首先确保代码中包含<string>头文件:
#include <string>
然后修改调用afficherTexte的代码:
// 拼接当前分数的显示文本 std::string scoreText = "Score: " + std::to_string(entite.score); // 拼接总分的显示文本 std::string totalScoreText = "Total Score: " + std::to_string(entite.scoreTotal); // 显示当前分数(位置沿用你原来的30, 540) afficherTexte(screenSurface, scoreText.c_str(), 255, 255, 255, "./Polices/crackman.ttf", 30, 30, 540); // 显示总分,调整y坐标避免和当前分数重叠,比如设为60 afficherTexte(screenSurface, totalScoreText.c_str(), 255, 255, 255, "./Polices/crackman.ttf", 30, 60, 540);
注意:如果你的
afficherTexte函数文本参数是std::string类型,直接传scoreText即可;如果是const char*(SDL的TTF渲染函数通常用这个类型),就需要用.c_str()把C++字符串转成C风格字符串。
方法2:用std::ostringstream灵活拼接
如果需要更复杂的文本组合(比如同时显示多个变量、添加特殊格式),可以用字符串流来实现:
先包含<sstream>头文件:
#include <sstream>
然后编写拼接逻辑:
std::ostringstream scoreStream; // 把多个内容按顺序拼接进流中 scoreStream << "Score: " << entite.score << " | Total: " << entite.scoreTotal; // 将流内容转换成字符串 std::string combinedScore = scoreStream.str(); // 调用显示函数 afficherTexte(screenSurface, combinedScore.c_str(), 255, 255, 255, "./Polices/crackman.ttf", 30, 30, 540);
额外提醒
- 每次分数更新后(比如执行
entite.score +=10之后),都要重新生成字符串并调用afficherTexte,否则屏幕上的分数不会同步更新。 - 确保
afficherTexte内部完成了完整的渲染流程:比如用TTF渲染文本到表面,再将这个表面blit到主屏幕表面,最后调用SDL_UpdateWindowSurface刷新显示。
内容的提问来源于stack exchange,提问作者Mily
相关产品推荐
相关产品推荐

