我有一个关于在我的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
而在屏幕上停留的时间足够长,但问题是它会在所有树上呈现受伤状态,而不是由玩家攻击的树。
我怎样才能使它只对当前被玩家攻击的实体造成伤害状态?
修改
游戏世界中的实体由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));