LIBGDX 每个阵列的碰撞检测

LIBGDX Collision detection in for each arrays

我在libgdx有一个2d游戏,我的游戏思路是防御游戏,英雄会出现在游戏画面的左边,敌人会​​出现在右边。

问题: 敌人数组中的所有敌人都不关心英雄,除了英雄数组中的最后一个英雄,运行 遍历所有英雄直到最后一个英雄然后他们关心最后一个英雄! ,对于英雄来说是相同的场景,他们不关心除了最后一个敌人之外的所有敌人。 怎么了?

private Array<Hero> heroes = new Array<>();
private Array<Enemy> enemies = new Array<>();

.....

public void overlapsDetector() {
    for (Hero hero : getHeroes()) {
        for (Enemy enemy : getEnemies()) {
            if (Intersector.overlaps(hero.getBounds(), enemy.getBounds())) {
                enemy.setEntityMode(EntityMode.SLASH);
                hero.setEntityMode(EntityMode.SLASH);
                enemy.setHealth(enemy.getHealth() - 1f);
                hero.setHealth(hero.getHealth() - 1f);
            } else {
                hero.setEntityMode(EntityMode.WALK);
                enemy.setEntityMode(EntityMode.WALK);
            }
        }
    }
}

问题是您在每次内循环迭代中都将英雄和敌人设置为 SLASH 或 WALK 状态。例如,如果您将您的英雄设置为对第一个敌人进行 SLASH,但随后检测到它超出了您最后一个敌人的范围,则您可以在不应该的时候将您的英雄设置回 WALK。

尝试这样的事情。

private Array<Hero> heroes = new Array<>();
private Array<Enemy> enemies = new Array<>();

.....

public void overlapsDetector() {

    for (Enemy enemy : getEnemies()) {
        enemy.setEntityMode(EntityMode.WALK); //initialise all enemies to walk
    }

    for (Hero hero : getHeroes()) {

        hero.setEntityMode(EntityMode.WALK); //initialise all heros to walk

        for (Enemy enemy : getEnemies()) {
            if (Intersector.overlaps(hero.getBounds(), enemy.getBounds())) {
                enemy.setEntityMode(EntityMode.SLASH);
                hero.setEntityMode(EntityMode.SLASH);
                enemy.setHealth(enemy.getHealth() - 1f);
                hero.setHealth(hero.getHealth() - 1f);
            } 
            //no else
        }
    }
}