node.js - 画布不正确的 measureText()
问题描述
我正在制作一个 Discord 机器人并尝试显示某人的级别,例如,我希望它基本上说“级别 1”,但是单词级别和实际级别之间的距离会根据他们所处的级别而变化。所以我试图稍微抵消这个词,但是当我使用 measureText() 时,它显示不正确。代码:
const levelNumber = '1';
const levelText = 'LEVEL';
ctx.font = '48px Shapirit';
ctx.fillStyle = '#FF1700';
ctx.textAlign = 'right';
ctx.fillText(levelNumber, 880, 96.8);
ctx.font = '22px Shapirit';
ctx.fillStyle = '#FF1700';
ctx.textAlign = 'right';
ctx.fillText(levelText, 880 - ctx.measureText(levelNumber).width - 20, 96.8);
解决方案
是的@Jay 是对的。你必须measureText
使用正确的字体,否则你会得到错误的结果。
请参阅下面的示例
function drawLevel(x, y, txt, num, style) {
ctx.font = '48px Shapirit';
ctx.fillStyle = style;
ctx.textAlign = 'right';
ctx.fillText(num, x, y);
w = ctx.measureText(num).width
ctx.font = '22px Shapirit';
ctx.fillStyle = style;
ctx.textAlign = 'right';
ctx.fillText(txt, x - w - 20, y);
}
canvas = document.getElementById("canvas");
ctx = canvas.getContext("2d");
drawLevel(200, 40, 'LEVEL', '999', '#FF1700');
drawLevel(200, 80, 'LEVEL', '11', '#0000FF');
drawLevel(200, 120, 'LEVEL', '1', '#00FF00');
<canvas id="canvas">
推荐阅读
- reactjs - 条件路由不呈现重定向的布局
- python - Python/Discord: Role not found
- msbuild - 使用 msbuild 16 vs2019 的带有目标的 Nuget 还原命令
- python - Python 键盘库无法区分 'down' 和 'right+down'
- php - 如何仅为页面添加类别?
- spring-boot - spring boot 动态 JPA 查询
- c# - 基于按钮点击隐藏/显示部分
- linker - 已解决:使用 ld.lld 链接器链接 nasm
- python - 仅当非零时才使用 pandas 滚动求和
- c# - this.initializeComponent() 上的 UWP 图形教程异常;