在处理中,这是删除先前文本的最快方法
问题描述:
我尝试用背景颜色重写文本,但旧文本的边缘(轮廓)仍保留在屏幕上。我不知道为什么。你能帮我么?在处理中,这是删除先前文本的最快方法
background(-1);
noLoop();
fill(#500F0F);
text("99", 300, 200);
fill(-1);
text("99",300, 200);
答
在未来,请尝试发布一个MCVE。您的帖子中的代码将文本完全从屏幕上拖出,这让我想知道真实代码中还有哪些不同之处。您是否使用draw()
功能?请通过发布MCVE来避免这些不确定因素。
无论如何,您的基本问题是由anti-aliasing造成的。默认情况下,处理使用消除锯齿功能,使图画看起来更平滑,像素更少。如果放大绘图并注意边缘有点模糊,则可以看到该图像。这对大多数图纸来说都是一件好事,但在您的情况下,这会导致模糊的边缘透出。
因此,要解决这个问题,你可以通过调用函数noSmooth()
关闭抗锯齿:
size(500, 500);
noSmooth();
background(255);
noLoop();
fill(#500F0F);
text("99", 300, 200);
fill(255);
text("99",300, 200);
还要注意,我使用255
作为放慢参数,而不是-1
。我不确定-1
应该做什么颜色参数,所以为了安全起见,我将它保持在0
和255
之间。
但是有点可疑,你需要首先“删除”任何文本。就像乔治的评论所说的那样,为什么不直接致电background()
函数来清除旧的帧呢?
这里有一个小例子:
void draw() {
background(64);
if (mousePressed) {
text("hello", 20, 40);
}
}
+1
不错的扩展答案(+1) –
你为什么不干脆清除与'背景()'整个屏幕? –