Java 2D游戏 - 为正确的实体渲染攻击视觉效果

时间:2018-05-05 08:26:46

标签: java animation 2d 2d-games

我有一个关于在我的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();
       }

    } 

"伤害"状态动画正确返回并且由于TimerTimerTask而在屏幕上停留的时间足够长,但问题是它会在所有树上呈现受伤状态,而不是由玩家攻击的树。

我怎样才能使它只对当前被玩家攻击的实体造成伤害状态?

修改 游戏世界中的实体由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));

0 个答案:

没有答案