在处理过程中遇到一些 Void Draw 问题

问题描述 投票:0回答:1
void setup() {
    size(500,500);
    background(#87ceeb);
    fill(#567d46);
    rect(0,height/2,500,height/2);
    fill(#FFA500);
    circle(50,50,75);
    // Cloud 1
    noStroke();
    fill(#FFFFFF);
    circle(335,50,50);
    circle(300,50,35);
    circle(370,50,35);
    noStroke();
    fill(#FFFFFF);
    circle(335,75,50);
    circle(300,75,35);
    circle(370,75,35);
    // Cloud 2
    noStroke();
    fill(#FFFFFF);
    circle(200,50,50);
    circle(165,50,35);
    circle(235,50,35);
    // Bush 1
    fill(#112A12);
    circle(100,425,50);
    circle(65,425,35);
    circle(135,425,35);
    noStroke();
    fill(#112A12);
    circle(100,450,50);
    circle(65,450,35);
    circle(135,450,35);
    // Bush 2
    fill(#112A12);
    circle(400,250,50);
    circle(365,250,35);
    circle(435,250,35);
    noStroke();
    // Path
    fill(#d9b99b);
    rect(0,300,width,75);
    // Post
    fill(#563d2d);
    rect(20,225,35,15);
    fill(#5C4033);
    rect(50,200,15,100);
    fill(#563d2d);
    rect(65,210,35,15);
  }
 
 
  void draw() {
    if (key == 'n'){
      background(#040348);
      fill(#006400);
      rect(0,height/2,500,height/2);
      // Moon
      fill(#d3d3d3);
      circle(450,50,75);
      fill(#808080);
      circle(435,35,15);
      fill(#808080);
      circle(450,65,25);
      // Rock
      rect(365,190,100,100);
      rect(350,280,130,20);
      fill(#563d2d);
      rect(365,300,100,85);
      textSize(35);
      fill(#d3d3d3);
      text("RIP",390,235);
      // Tree
      fill(#563d2d);
      rect(60,140,75,200);
      fill(#154734);
      rect(25,150,145,75);
      rect(35,125,125,75);
      // Stars
      fill(#ffff00);
      circle(75,50,10);
      circle(135,80,10);
      circle(225,65,10);
      circle(275,200,10);
      circle(300,150,10);
      circle(330,20,10);
 
 
      // Path
      fill(#AC9362);
      rect(0,400,width,75);
     
    } else if (key == 'd') {
    background(#87ceeb);
    fill(#567d46);
    rect(0,height/2,500,height/2);
    fill(#FFA500);
    circle(50,50,75);
    // Cloud 1
    noStroke();
    fill(#FFFFFF);
    circle(335,50,50);
    circle(300,50,35);
    circle(370,50,35);
    noStroke();
    fill(#FFFFFF);
    circle(335,75,50);
    circle(300,75,35);
    circle(370,75,35);
    // Cloud 2
    noStroke();
    fill(#FFFFFF);
    circle(200,50,50);
    circle(165,50,35);
    circle(235,50,35);
    // Bush 1
    fill(#112A12);
    circle(100,425,50);
    circle(65,425,35);
    circle(135,425,35);
    noStroke();
    fill(#112A12);
    circle(100,450,50);
    circle(65,450,35);
    circle(135,450,35);
    // Bush 2
    fill(#112A12);
    circle(400,250,50);
    circle(365,250,35);
    circle(435,250,35);
    noStroke();
    // Path
    fill(#d9b99b);
    rect(0,300,width,75);
    // Post
    fill(#563d2d);
    rect(20,225,35,15);
    fill(#5C4033);
    rect(50,200,15,100);
    fill(#563d2d);
    rect(65,210,35,15);
   
    }
  }
 
    void mousePressed() {
        fill(#FF0000);
        circle(mouseX,mouseY,50);
    }

我想做到这样,每当我单击它时,就会将一个对象放入画布中,但是每当我在白天和黑夜之间切换并返回时,圆圈就会消失。最重要的是,我只能在白天和黑夜之间切换之前先画圈。切换会导致下一个圆圈立即消失。我该如何解决这些问题。

我尝试将 void mousepressed 函数放置在循环内,但这也不起作用。

java processing draw
1个回答
0
投票

请记住,每次调用绘制函数时(我认为每秒 60 次),自从您调用

background()
以来,所有内容都会消失,这就是您需要再次绘制圆圈的原因。

为了解决这个问题,您可以将圆的坐标存储在数组中,然后从这些坐标中进行绘制。例如,您可以为 x 坐标创建一个 IntList,并在每次按下鼠标时将 mouseX 添加到其中,并对 y 坐标执行相同的操作,然后检查列表并为每个坐标调用

circle(x,y,50)

//start of your sketch
IntList xcoord = new IntList();
IntList ycoord = new IntList();

//in the draw
for(int i = 0;i<xcoord.size();i++) {
  circle(xcoord.get(i),ycoord.get(i),50);
}

//the mousePressed()
void mousePressed() {
  xcoord.append(mouseX);
  ycoord.append(mouseY);
}
© www.soinside.com 2019 - 2024. All rights reserved.