如何检测看起来对玩家的方向 - Java

时间:2012-03-16 12:13:51

标签: java animation angle direction

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

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

希望你不知道我的意思,请回答:D

1 个答案:

答案 0 :(得分: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);
    }
}

你完成了!如果您还有其他问题,请与我们联系。