Я пытаюсь заставить игрока уничтожить сущность в моей игре, но не могу придумать, как игрок может уменьшить здоровье сущности, я пытаюсь сделать это так, когда игрок нажимает пробел, это уменьшит здоровье самой близкой сущности, способ, которым я вычисляю ближайшую, использует методологию ограничивающего прямоугольника, выровненную по оси, класс сущности абстрактный, и я создаю другие сущности, используя такие как player и rock
Код в классе Player для проверки, не нажата ли клавиша пробела,
if (window.getInput().isMouseButtonDown(GLFW.GLFW_KEY_SPACE))
attack();
метод атаки для класса проигрывателя все еще пуст
public void attack() {
}
код в классе сущности для причинения вреда сущности, где active является логическим значением и возвращает истину до тех пор, пока состояние здоровья не станет равным 0
public void hurt() {
health -=1;
if(health<=0) {
active = false;
destroy();
}
}
в методе рендеринга в мире, который рендерит сущности, он прекращает рендеринг сущности isActive is false
for (Entity entity : entities) {// itaarate through all the entities in list of entities
entity.render(shader, camera, this);// render each entity
if(!entity.isActive())
entities.remove(entity);
}
код AABB, который проверяет, является ли ближайшая сущность,
AABB[] boxes = new AABB[25];//surrounds entity with 5*5 bounding boxes
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
boxes[i + j * 5] = world.getTileBoundingBox(
(int) (((transform.position.x / 2) + 0.5) - (5 / 2)) + i,
(int) (((-transform.position.y / 2) + 0.5) - (5 / 2)) + j);
// gets everything around player for
// bounding boxes
}
}
AABB box = null;
//
// getting closest box
//
for (int i = 0; i < boxes.length; i++) {
if (boxes[i] != null) {
if (box == null)
box = boxes[i];
Vector2f length1 = box.getCenter().sub(transform.position.x, transform.position.y, new Vector2f());
Vector2f length2 = boxes[i].getCenter().sub(transform.position.x, transform.position.y, new Vector2f());
if (length1.lengthSquared() > length2.lengthSquared()) {// used squared to save cpu power
box = boxes[i];
}
}
}
//
// colliding with it
//
if (box != null) {
, что я пытаюсь сделать, это вызвать метод hurt o n, который является ближайшей к игроку сущностью, когда пользователь нажимает пробел