在处理中,这是删除先前文本的最快方法

问题描述:

我尝试用背景颜色重写文本,但旧文本的边缘(轮廓)仍保留在屏幕上。我不知道为什么。你能帮我么?在处理中,这是删除先前文本的最快方法

background(-1); 
noLoop(); 
fill(#500F0F); 
text("99", 300, 200); 
fill(-1); 
text("99",300, 200); 

Outcome:

+1

你为什么不干脆清除与'背景()'整个屏幕? –

在未来,请尝试发布一个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应该做什么颜色参数,所以为了安全起见,我将它保持在0255之间。

但是有点可疑,你需要首先“删除”任何文本。就像乔治的评论所说的那样,为什么不直接致电background()函数来清除旧的帧呢?

这里有一个小例子:

void draw() { 
    background(64); 
    if (mousePressed) { 
    text("hello", 20, 40); 
    } 
} 
+1

不错的扩展答案(+1) –