如何计算屏幕上按钮中心点 实现按钮内文本精准居中显示
按钮文本精准居中坐标计算方案
问题背景
编写按钮相关代码时,已完成碰撞盒检测等全部相关功能,但无法将按钮文本放置在按钮正中心,多次尝试方案均未生效。
已知参数
- 按钮坐标:x=120,y=120
- 按钮尺寸:宽度w=120,高度h=50
- 适配屏幕尺寸:480*240
当前失效实现
当前尝试的代码如下,运行后文本位置略微偏右上,未处于按钮正中心:
Brain.Screen.printAt(x + (w / 2, y + (h / 2), false, "Bruh"); // printAt 方法参数定义:int x, int y, bool opaque, const char *text
问题原因
- 代码存在括号嵌套错误,触发C++逗号表达式逻辑,实际传入的x坐标值不符合预期,传参本身存在错误。
printAt方法的x、y参数定义为文本渲染区域的左上角坐标,而非文本中心点坐标。直接将按钮中心坐标作为绘制起点,会让文本左上角对齐按钮中心,文本整体自然偏右上。
正确实现方案
文本居中的核心逻辑是:让文本自身的中心点与按钮中心点重合,需要先获取待渲染文本的实际像素宽高,再计算绘制起点坐标,公式如下:
文本绘制x坐标 = 按钮x坐标 + (按钮宽度 - 文本宽度) / 2
文本绘制y坐标 = 按钮y坐标 + (按钮高度 - 文本高度) / 2
VEX Brain的Screen API提供了直接获取文本渲染尺寸的方法,修正后的可运行代码如下:
const char* buttonText = "Bruh"; // 获取待渲染文本的实际像素尺寸 int textWidth = Brain.Screen.getStringWidth(buttonText); int textHeight = Brain.Screen.getStringHeight(buttonText); // 计算居中绘制的左上角起点坐标 int drawPosX = x + (w - textWidth) / 2; int drawPosY = y + (h - textHeight) / 2; // 传入正确坐标绘制文本 Brain.Screen.printAt(drawPosX, drawPosY, false, buttonText);
内容的提问来源于stack exchange,提问作者Void
相关产品推荐
相关产品推荐

