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
}
}
}
我在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
}
}
}