我需要帮助检查我正在创建的游戏中的交叉点:当角色与屏幕上的单个障碍物发生碰撞时,一切都会按预期工作,但是当屏幕上添加多个障碍物时,角色只能跳出最后一个障碍物正在检查碰撞。角色仍然可以正确地与其他障碍物发生碰撞(不会跌落,无法通过),但无法跳下它们。Obs 是障碍物的数组列表。Ground 是确定是否允许角色跳跃的布尔值。
public void checkIntersect(ArrayList<Obstacle> obs){
for(Obstacle a: obs){
if(a.getLeft().intersects(this.getRight())){
if(getDx()>0){
sidecollision=true;
setDx(0);
this.x-=1.5f;
}
} if (a.getRight().intersects(this.getLeft())){
sidecollision = true;
setDx(0);
this.x+=1.5f;
} if((a.getTop()).intersects(this.getBottom())){
ground=true;
setDy(0);
this.y-=.10f;
} else if(!(a.getTop()).intersects(this.getBottom())){
ground = false;
//return ground;
} if(a.getBottom().intersects(this.getTop())){
ground=false;
setDy(0);
this.y+=.1f;
}
}
}
以及如何在游戏组件上检查碰撞:
bg.update(quote);
win.fill(clear);
bg.drawBG(win);
for(Obstacle o: obs){
o.draw(win);
o.update(bg);
}
if(quote.isVisible()){
quote.movedrawProtag(win, keys);
quote.checkIntersect(obs);
}