0

以下の Collision メソッドに問題があります。問題は、ゲームに 2 人の敵がいる場合です。ループ内で 1 つの敵と交差し、衝突の場合は true を返します。しかし、この配列 List 内に 2 番目の敵がいる場合、その 2 番目のオブジェクトとは衝突しないため、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

これは「早期復帰」問題のもう 1 つの例です。この問題は、形式 (if ANY, x, else y) または (if ALL, x, else y) のチェックを行う必要があり、それを形式 (if 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 に答える