У меня есть вопрос об отображении определенных состояний для отдельных объектов в моей 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));