OpenGL Player уничтожающий объект - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь заставить игрока уничтожить сущность в моей игре, но не могу придумать, как игрок может уменьшить здоровье сущности, я пытаюсь сделать это так, когда игрок нажимает пробел, это уменьшит здоровье самой близкой сущности, способ, которым я вычисляю ближайшую, использует методологию ограничивающего прямоугольника, выровненную по оси, класс сущности абстрактный, и я создаю другие сущности, используя такие как 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, который является ближайшей к игроку сущностью, когда пользователь нажимает пробел

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...