You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:20:13