Как дублировать изображение при нажатии на кнопку "Обработка"

Я пытаюсь сделать простую игру по мухам для школьного задания. Мне нужно сделать так, чтобы, когда я щелкаю мышью по мухе, она заменила изображение одной из сплющенных мух, а затем сгенерировала одну новую муху в случайной позиции. Я выполнил первую часть, но когда я нажимаю на муху, она генерирует несколько новых мух, и, если я нажимаю на уже раздавленную, она делает то же самое.

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

РЕДАКТИРОВАТЬ: Вот своего рода пример с квадратами

1 ответ

Решение

Чтобы решить обе ваши проблемы, единственное, что вам нужно сделать, это добавить еще одно условие к вашему if заявление в collisionDetected() где вы проверяете, что текущая муха еще не захвачена:

&& swat[i]==0
Другие вопросы по тегам