首页 > 解决方案 > 我想在处理中使用 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,效果很好。我只是很困惑这现在是如何造成问题的。

标签: javaanimationprocessing

解决方案


`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);    
  }
}

如果您有后续问题,我会在附近。玩得开心!


推荐阅读