Как я могу предотвратить перекрытие двух Rectangle2D?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как я могу предотвратить перекрытие двух Rectangle2D?

Сообщение Anonymous »

Я пытаюсь создать игру типа «Выживший вампир» и в настоящее время создаю логику врагов, но я обнаружил проблему: они могут перекрывать друг друга до такой степени, что вы не можете Я даже не замечаю, что их двое, и это неудобно, потому что мне нужно, чтобы они могли сталкиваться и, возможно, слегка накладываться друг на друга, но не до такой степени.
Я пытался использовать код для решения коллизий, но когда я пытаюсь чтобы сделать это, эти двое просто двигаются один за другим, подталкивая друг друга, хотя я чувствую, что мой код выполнен не лучшим образом.
Движение врага:

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»