【问题标题】:How to duplicate image when clicked in Processing在处理中单击时如何复制图像
【发布时间】:2018-04-12 01:55:01
【问题描述】:

我正在尝试为学校作业制作一个简单的苍蝇拍打游戏。我需要这样做,以便当我在苍蝇上单击鼠标时,它将用一个被压扁的苍蝇替换图像,然后在随机位置生成一个新的苍蝇。我已经完成了第一部分,但是当我单击它生成的苍蝇时,会生成多个新苍蝇,如果我单击一个已经被压扁的苍蝇,它也会这样做。

void collisionDetect(){ //collision detection - detect collision between 
swatter and fly
for(int i=0; i<swat.length;i++){ // bounding box detection
if(0 <= (mouseX-fX[i]) && (mouseX-fX[i]) <= flysize && 0 <= (mouseY-fY[i]) && (mouseY-fY[i])<= flysize ){ // condition should look at location of mouse and individual coordinates in fX and fY
  swat[i] = 1; // swatted
  fX =append(fX, random(flysize, 780)); 
  fY =append(fY, random(flysize, 380));
  swat =append(swat, 0); 
  score++; //increment score
}
}
}

这是按下鼠标时触发的功能,所以我假设问题出在此处。

void populate(){ 
for(int i=0;i<fX.length;i++){
if(swat[i]==1){ 

  image(flybye, fX[i], fY[i]);
  flybye.resize(flysize, flysize);
} else { 
  image(fly, fX[i], fY[i]);
  fly.resize(flysize, flysize);
}
}
}

这是根据添加到数组的 fX 和 fY 的初始随机生成值放置苍蝇的函数

任何帮助将不胜感激!

        PImage fly,flybye,swatter,swatted;
    float[] fX,fY;  
    float[] swat;  
    int score=0;  
    int flysize = 40;

    void setup(){
      size(800,400);
      fX=new float[0];
      fY=new float[0];
      swat=new float[0];

      fX =append(fX, random(flysize, 780)); 
      fY =append(fY, random(flysize, 380));
      swat = append(swat,0); 
    }
    void populate(){ 
      for(int i=0;i<fX.length;i++){
        if(swat[i]==1){ 

          rect(fX[i], fY[i], flysize, flysize);
          fill(50);
        } else { // not swatted
          rect(fX[i], fY[i], flysize, flysize);
          fill(30);
        }
      }
    }

    void collisionDetect(){ 
      for(int i=0; i<swat.length;i++){ 
        if(0 <= (mouseX-fX[i]) && (mouseX-fX[i]) <= flysize && 0 <= (mouseY-fY[i]) && (mouseY-fY[i])<= flysize ){ 
          swat[i] = 1; // swatted
          fX =append(fX, random(flysize, 780)); /
          fY =append(fY, random(flysize, 380));
          swat =append(swat, 0); 
          score++;             }
      }
    }

    void draw(){
      background(255);
      populate();
        if(mousePressed){ 
          collisionDetect();
        }
    }

编辑:这是一个正方形的例子

【问题讨论】:

  • 你能发一个minimal reproducible example吗?请注意,这应该是您的完整程序。它应该只是一个演示问题的简单可运行示例。我建议将一个示例放在一起,该示例显示一个在您单击时会改变颜色的矩形。
  • 嘿凯文,刚刚更新了一个小例子。

标签: java arrays function processing pde


【解决方案1】:

要解决这两个问题,您唯一需要做的就是在 collisionDetected() 中的 if 语句中添加另一个条件,您可以在其中检查当前苍蝇是否尚未被拍打:

&& swat[i]==0

【讨论】:

  • 其实为了“效率”,最好把swatted check放在if语句的开头。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-17
  • 2020-03-02
  • 1970-01-01
  • 1970-01-01
  • 2018-10-26
  • 2021-09-16
  • 2018-10-03
相关资源
最近更新 更多