0

您好,我正在制作一个用于 Java 测试的游戏,我想制作一些东西,但不知道如何制作。所以我有 4 个动画,用于向上/向下/向左/向右的方向以及动物(实体)和玩家的位置。

我想让动物一直看着玩家,但不知道怎么做。如果我使用'if entity.x>player.x',它会看向正确的一面,但不能向下或向上看?

希望你明白我的意思,请回答:D

4

1 回答 1

0

你已经成功了一半。您要做的是确定玩家所在的动物相对于动物的位置。

让我们先做一个枚举来封装它

enum Direction { NORTH, EAST, SOUTH, WEST };

如您所说,您可以检查玩家是在动物的左侧还是右侧。

if(player.getX() > animal.getX()) {
    animal.setDirection(Direction.EAST);
} else { 
    animal.setDirection(Direction.WEST);
}

同样,您可以对 Y 坐标和北/南方向执行相同的操作。

if(player.getY() > animal.getY()) {
    animal.setDirection(Direction.NORTH);
} else { 
    animal.setDirection(Direction.SOUTH);
}

那么现在,我们如何确定应该使用第一次检查还是第二次检查呢?好吧,考虑一下。如果你住在你所在的“北方”,你可能不是正北,而是大部分是北方——例如,当然,比东方更北。因此,一个很好的检查是“主导方向是什么” - 即。如果你住在比东更北的地方,你就说你住在北。那你怎么检查呢?好吧,你说你必须向北/向南行驶到你的地方的距离大于你必须向东/向西行驶的距离。在代码中:

if(Math.abs(animal.getX() - player.getX()) > Math.abs(animal.getY() - player.getY())) {
    //More east-west than north-south - do EAST-WEST check
} else {
    //More north-south than east-west - do NORTH-SOUTH check
}

所以,结合这给出了最终结果:

if(Math.abs(animal.getX() - player.getX()) > Math.abs(animal.getY() - player.getY())) {
    //More east-west than north-south - do EAST-WEST check
    if(player.getX() > animal.getX()) {
        animal.setDirection(Direction.EAST);
    } else { 
        animal.setDirection(Direction.WEST);
    }
} else {
     //More north-south than east-west - do NORTH-SOUTH check
    if(player.getY() > animal.getY()) {
        animal.setDirection(Direction.NORTH);
    } else { 
        animal.setDirection(Direction.SOUTH);
    }
}

你完成了!如果您还有其他问题,请告诉我。

于 2012-03-16T14:56:25.453 回答