Я пытался использовать код для решения коллизий, но когда я пытаюсь чтобы сделать это, эти двое просто двигаются один за другим, подталкивая друг друга, хотя я чувствую, что мой код выполнен не лучшим образом.
Движение врага:
Код: Выделить всё
public void move(double playerX, double playerY, double fps, List enemiesList){
double angle = Math.atan2(playerY - y, playerX - x);
x += Math.cos(angle) * speed / fps;
y += Math.sin(angle) * speed / fps;
hitbox.setFrame(x, y, 40, 40);
for (int i = 0; i < enemiesList.size(); i++) {
if (this == enemiesList.get(i)) {
continue;
}
if (hitbox.intersects(enemiesList.get(i).getHitbox())) {
resolveCollition(enemiesList.get(i).getHitbox());
}
}
}
Код: Выделить всё
private void resolveCollition(Rectangle2D.Double otherHitbox) {
double overX;
double overY;
if (this.hitbox.getCenterX() < hitbox.getCenterX()) {
overX = hitbox.getMaxX() - this.hitbox.getMinX();
} else {
overX = hitbox.getMinX() - this.hitbox.getMaxX();
}
if (this.hitbox.getCenterY() < hitbox.getCenterY()) {
overY = hitbox.getMaxY() - this.hitbox.getMinY();
} else {
overY = hitbox.getMinY() - this.hitbox.getMaxY();
}
x -= overX;
y -= overY;
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... verlapping
Мобильная версия