使用 clearRect() 覆盖画布上的文本输出
using clearRect() to overwrite text output on canvas?
我正在jsbin上做一个小游戏,到目前为止一切都进展顺利,但我遇到了一个小问题。游戏的目标是在一分钟内尽可能多地点击随机出现的圆圈。我希望它输出剩余的时间和角落里的分数,我已经做到了。问题是它们相互覆盖。这是因为为了防止闪烁,我决定不使用
c.clearRect(0,0,canvas.width,canvas.height);
而是在单击圆圈时在圆上绘制一个 clearRect。我想对文本做类似的事情。我用了这行:
c.clearRect(0,fontSize,c.measureText(timeLeft),fontSize);
这应该有效,但没有效果。我已经尝试了所有方法,但我不知道这条线有什么问题。我唯一的另一个理论是代码中的错误位置,但我没有发现问题。
这是我正在处理的当前版本的链接:http://jsbin.com/touchgame/10/edit
谢谢!
measureText() 返回一个具有 width 属性的对象,因此您需要使用 c.measureText(timeLeft).width。
此外,您减少了 timeLeft,然后调用了 clearRect,这将根据 timeLeft 的新宽度清除一个矩形。您希望根据"旧"时间左值的宽度清除,然后减少时间左:
if (timeLeft < 1){
c.clearRect(0,fontSize,c.measureText(timeLeft).width + 5,fontSize*1.5);
timeLeft--;
//clear over time output
console.log(c.measureText(timeLeft));
}
这应该有效。由于绘制文本的工作方式,准确知道文本的边界框并非易事,因此我们清除的区域比 fontSize 更大。您可以使用 c.textBaseline = 'top',这会将顶部坐标的文本放在您指定的 y 处,而不是文本的基线位于 y。
最后,我认为当您想要更新图形时,完全清除画布并重新绘制所有内容是一种更简单的方法。如果你清除画布,然后立即重新绘制 evrything,你不会得到任何闪烁。在大多数情况下,重绘所有内容的性能影响通常可以忽略不计,并且它使事情变得简单得多。
相关文章:
- 使用JS从选择和文本输入中捕获值,并将输出返回到HTML
- 当在文本框中搜索关键字时,我会得到以前的结果作为输出
- 它在另一个函数中嵌套后不会输出文本
- 有没有一种方法可以从两个标签之间提取文本,并以我选择的格式输出
- 输出文本不't以正确格式显示
- Javascript重复模式匹配,然后输出到文本区域
- 具有.txt输出的富文本编辑器
- 使用 clearRect() 覆盖画布上的文本输出
- 如何在文本框中显示内部 HTML 输出
- 使用构造函数 - 原型从文本框输出值
- 将禁用的输出字段更改为带前缀的文本
- 从一个文本框执行代码,并在另一个文本框中以 HTML 显示输出
- 如何将文本输出到不是't输入不同颜色的文本
- 如何在 p5.js 中将 For 循环的文本输出替换为不同的值
- 将文本输入到 .html1,将相同的文本输出到 .html2
- 检查是否将某些文本输出到屏幕PHP
- 如何渲染QuillJS富文本输出到HTML
- 以可变颜色和可变文本输出文本到页面
- 创建包含可变文本输出的网页
- (JavaScript)随机文本输出-建议