Java 2D Game - рендеринг визуальной атаки для правильных объектов - PullRequest
0 голосов
/ 05 мая 2018

У меня есть вопрос об отображении определенных состояний для отдельных объектов в моей Java 2D-игре.

Полный код на https://github.com/keloman/java2dproject/tree/master, но я выложу здесь самые важные биты

В моем классе Player у меня есть следующая логическая переменная:

// Checks if entity is hurt by player
public static boolean isHurt = false;

В методе checkAttacks() для isHurt установлено значение true

for (Entity e : handler.getWorld().getEntityManager().getEntities()) {
        if (e.equals(this)) {
           // Check if Entity is player 
           // So the player doesnt hurt himself when attacking
            continue; 
        }
        if (e.getCollisionBounds(0,0).intersects(aRectangle)) {
            isHurt = true;
            e.hurt(1);
            return;
        }
    }

В моем классе Tree метод tick() делается так:

@Override
public void tick() {
    if (Player.isHurt) {
        getCurrentAnimationFrame();
        timer.schedule(new TimerTask(){
            @Override
            public void run() {
                Player.isHurt = false;
            }
        },180);
    }

}

И он вызывает этот метод:

private BufferedImage getCurrentAnimationFrame() {   
       if (Player.isHurt) {  
          return treeHurtTwo.getCurrentFrame();
       } else {
           return treeTwo.getCurrentFrame();
       }

    } 

Анимация состояния "повреждение" возвращается правильно и остается на экране достаточно долго из-за Timer и TimerTask, но проблема в том, что она отображает состояние повреждения на ВСЕХ деревьях, а не на дереве, атакованном игроком.

Как я могу сделать так, чтобы оно отображало состояние повреждения ТОЛЬКО на объекте, на которого в данный момент нападает игрок?

EDIT: Сущности в игровом мире управляются классом EntityManager, который хранит сущности в структуре ArrayList.

 public ArrayList<Entity> entities;

Затем они добавляются в игровой мир в классе World следующим образом

entityManager.addEntity(new Tree(handler,100,200));
entityManager.addEntity(new Tree(handler,200,200));
entityManager.addEntity(new Tree(handler,350,200));
entityManager.addEntity(new Rock(handler,400,450));
...