在处理中单击时如何复制图像
How to duplicate image when clicked in Processing
我正在尝试为学校作业制作一个简单的苍蝇拍打游戏。我需要这样做,以便当我在苍蝇上单击鼠标时,它将用一只被压扁的苍蝇替换图像,然后在随机位置生成一只新苍蝇。我已经完成了第一部分,但是当我点击一只苍蝇时,它会生成多只新苍蝇,如果我点击一只已经被压扁的苍蝇,它也会产生同样的效果。
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();
}
}
编辑:这是一个带有正方形的例子
要解决这两个问题,您唯一需要做的就是在 collisionDetected()
中的 if
语句中添加另一个条件,检查当前苍蝇是否尚未被拍打:
&& swat[i]==0
我正在尝试为学校作业制作一个简单的苍蝇拍打游戏。我需要这样做,以便当我在苍蝇上单击鼠标时,它将用一只被压扁的苍蝇替换图像,然后在随机位置生成一只新苍蝇。我已经完成了第一部分,但是当我点击一只苍蝇时,它会生成多只新苍蝇,如果我点击一只已经被压扁的苍蝇,它也会产生同样的效果。
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();
}
}
编辑:这是一个带有正方形的例子
要解决这两个问题,您唯一需要做的就是在 collisionDetected()
中的 if
语句中添加另一个条件,检查当前苍蝇是否尚未被拍打:
&& swat[i]==0