java - 我想在处理中使用 keyPressed() 稍微移动一个椭圆,但是当我这样做时,它会添加另一个椭圆而不是去掉一个
问题描述
抱歉,如果这是一个愚蠢的问题,我才开始在处理中学习 Java,我有点困惑。哈哈
boolean eyeMove = false;
boolean armMove = false;
void setup() {
size(600, 800);
smooth();
}
void draw() {
stroke(1);
fill(255);
ellipse(300, 460, 230, 270);
stroke(1);
fill(188);
ellipse(280, 220, 35, 95);
ellipse(320, 220, 35, 95);
fill(126);
ellipse(280, 220, 20, 80);
ellipse(320, 220, 20, 80);
stroke(1);
fill(255);
ellipse(300, 300, 100, 100);
fill(188);
noStroke();
ellipse(300, 460, 130, 170);
fill(0);
ellipse(240, 580, 40, 40);
ellipse(360, 580, 40, 40);
fill(0);
ellipse(300, 320, 20, 10);
fill(0);
triangle(300, 330, 289, 344, 310, 344);
fill(188);
stroke(1);
ellipse(280, 290, 20, 20);
ellipse(320, 290, 20, 20);
keyPressed();
}
void keyPressed() {
if (!keyPressed) {
fill(0);
ellipse(390, 350, 40, 40);
ellipse(210, 350, 40, 40);
} else if (keyPressed) {
armMove = true;
fill(125);
ellipse(390, 350, 40, 40);
ellipse(230, 350, 40, 40);
}
我在兔子的眼睛上使用了 mousePressed,效果很好。我只是很困惑这现在是如何造成问题的。
解决方案
`draw() 方法不仅仅是一个绘图循环。这是你程序的主循环。因此,它不会在循环的每次迭代中清除屏幕,而只是绘制您告诉它绘制的任何内容。事实上,你可以用任何方法绘制,只要它在某个时候被调用。
这里的问题是你在前一个上重新绘制了兔子。您永远不会“擦除”您以前的绘图。人们通常使用这种background()
方法来做到这一点。我稍微修改了您的草图以向您展示我的意思:
void setup() {
size(600, 800);
smooth();
}
void draw() {
background(128);
stroke(1);
fill(255);
ellipse(300, 460, 230, 270);
fill(188);
ellipse(280, 220, 35, 95);
ellipse(320, 220, 35, 95);
fill(126);
ellipse(280, 220, 20, 80);
ellipse(320, 220, 20, 80);
fill(255);
ellipse(300, 300, 100, 100);
fill(188);
noStroke();
ellipse(300, 460, 130, 170);
fill(0);
ellipse(240, 580, 40, 40);
ellipse(360, 580, 40, 40);
ellipse(300, 320, 20, 10);
triangle(300, 330, 289, 344, 310, 344);
fill(188);
stroke(1);
ellipse(280, 290, 20, 20);
ellipse(320, 290, 20, 20);
if (keyPressed) {
ellipse(390, 350, 40, 40);
ellipse(230, 350, 40, 40);
} else {
ellipse(390, 350, 40, 40);
ellipse(210, 350, 40, 40);
}
}
如果您有后续问题,我会在附近。玩得开心!