您好,我正在制作一个用于 Java 测试的游戏,我想制作一些东西,但不知道如何制作。所以我有 4 个动画,用于向上/向下/向左/向右的方向以及动物(实体)和玩家的位置。
我想让动物一直看着玩家,但不知道怎么做。如果我使用'if entity.x>player.x',它会看向正确的一面,但不能向下或向上看?
希望你明白我的意思,请回答:D
你已经成功了一半。您要做的是确定玩家所在的动物相对于动物的位置。
让我们先做一个枚举来封装它
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);
}
}
你完成了!如果您还有其他问题,请告诉我。