gpt4 book ai didi

java - 尝试执行 if 语句时程序卡住

转载 作者:行者123 更新时间:2023-12-02 09:59:22 25 4
gpt4 key购买 nike

我是处理新手,并被分配制作苍蝇拍游戏。他们给了我们框架代码,我一直在研究它。目前我遇到了一个问题。每当碰撞检测()时,整个过程都会卡住,并且没有错误消息;函数发生在鼠标按下时,我想我已经将其范围缩小到与 swat 数组有关,但这是提供的框架代码的一部分,我不完全确定是什么导致了问题

这是迄今为止我的代码:

PImage fly,flybye,swatter,swatted;
float[] fX,fY; // fly locations array
float[] swat; // fly swatted binary boolean array, 1 = swatted, 0 = not swatted
int score=0; // increments when swatted.


void setup(){
size(800,400);
fX=new float[0];
fY=new float[0];
swat=new float[0];
// load images
fly = loadImage("fly.png");
fly.resize(50,50);
flybye = loadImage("flybye.png");
flybye.resize(50,50);
swatter = loadImage("swatter.png");
swatted = loadImage("swatted.png");

fX =append(fX, random(50,750)); //first fly - random location
fY =append(fY, random(25,375));
swat =append(swat,0); // used as a boolean and matches to each individual fly, 0 = fly not swatted, 1 = swatted.
}

void populate(){ // draw the flies in memory to the screen.
for(int i=0;i<fX.length;i++){
if(swat[i]==1){ // if swatted
// resize the fly image and place based on fx/fy array values
image(flybye, fX[0], fY[0]);
} else { // not swatted
image(fly,fX[0],fY[0]);
}
}
}

void collisionDetect(){ //collision detection - detect collision between swatter and fly
for(int i=0; i<swat.length;i++){ // bounding box detection
if(mouseX-37 > fX[0]-40 && mouseX-37 < fX[0]+40 && mouseY-30 > fY[0]-40 && mouseY-30 < fY[0]+40){ // condition should look at location of mouse and individual coordinates in fX and fY
swat[0] = 1; // swatted
image(flybye, fX[0], fY[0]);
fX =append(fX, random(50,750)); //new fly placed in random location when old fly dies.
fY =append(fY, random(50,350));
swat =append(swat,0); // new fly not swatted
score++; //increment score
}
}
}

void draw(){
background(255);


//noCursor(); //added to hide cursor for a more fluid look
populate(); // draw flys to screen.
fill(0);
// set a text size and location for the score.
if(mousePressed){ // image swap
println("Error1");
collisionDetect();
image(swatted, mouseX-37, mouseY-30); //draw swatter image to around mouse locaiton - might want to play with this to get it to look right.
println("Error");
}else{
image(swatter, mouseX-37, mouseY-30); // if not pressed then alternative image.
}

}

最佳答案

问题是原因,因为您在遍历容器时向它添加元素 swat:

for(int i=0; i<swat.length;i++) {
if (...)
...
swat = append(swat, 0);
...
}
}

统计遍历swat时的碰撞次数。忽略拍打苍蝇。在单独的循环中进行碰撞检测后添加新的苍蝇:

void collisionDetect(){

int newFlys = 0;
for(int i=0; i<swat.length;i++){ // bounding box detection
if ( swat[0] == 1 )
continue;
if(mouseX-37 > fX[0]-40 && mouseX-37 < fX[0]+40 && mouseY-30 > fY[0]-40 && mouseY-30 < fY[0]+40){
swat[0] = 1; // swatted
newFlys ++;
image(flybye, fX[0], fY[0]);
score++; //increment score
}
}

for (int i=0; i < newFlys; ++i){
fX = append(fX, random(50,750)); //new fly placed in random location when old fly dies.
fY = append(fY, random(50,350));
swat =append(swat,0); // new fly not swatted
}
}

关于java - 尝试执行 if 语句时程序卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55748027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com