0

我的碰撞方法有问题。问题是当游戏中有两个敌人时。它在循环中与一个敌人相交,并继续返回真以表示碰撞。但是如果这个数组 List 中有第二个敌人,它就不会与第二个对象发生碰撞,因此导致它返回 false 并且玩家继续行走。有什么想法可以让他在与任何敌人接触时停下来,而不是因为他没有与所有敌人接触而继续前进?谢谢,这里是代码。

public void checkCollision(){
    ArrayList<Enemy> enemy = c.getEnemyList();
    for ( int i = 0; i < enemy.size(); i++){
        Enemy e = enemy.get(i);

        if (!getBounds().intersects(e.getBounds())){
            walk();
            return;
        }
        if (getBounds().intersects(e.getBounds())){
            if (e.getHP() <= 0){
                c.removeEnemy(e);
                walk();
                return;
            }
            fight();
            if (count == 25 || count == 65){
                int dd = DCalc.calcDmg(atk, atkMAX);
                e.dmg(dd);
            }

    }
    }

}
4

1 回答 1

0

这只是“提前返回”问题的另一个例子。当您需要检查格式(if ANY,x,else y)或(if ALL,x,else y)并以格式(如果 FIRST,x,else y)重新表述它时,就会出现此问题。

为了解决这个问题,您需要重新制作算法,如下所示:

bool collided = false
For each enemy:
    Are we colliding with this enemy?
    If we are, do collision detection and set `collided` to true
end for

If `collided` is false, NOW we can run the code that should only run if we collided with nothing
于 2013-04-24T00:53:19.400 回答