Java:Enemy关注Player

时间:2014-08-04 22:26:02

标签: java

我有一个敌人和一个玩家。我要做的是让我的敌人在移动时不断跟随我的玩家。我有代码可以做到这一点,但是妖精的速度根据我的角色相对于敌人的位置而有所不同:例如当我在敌人的左边和敌人的左边时(敌人的负面),它移动超级快速,在我的球员。然而,当我向下和向右(敌人的正面)时,每件事都很好。有什么想法吗?

以下是我的敌人更新功能:

        MoveToX = Board.playerOne.getX();
        MoveToY = Board.playerOne.getY();

        float distance = (float) Math.sqrt(Math.pow(MoveToX - x, 2) + Math.pow(MoveToY - y, 2));

        amountToMoveX = (((MoveToX - x) / distance) * speed);
        amountToMoveY = (((MoveToY - y) / distance) * speed);

        x+= amountToMoveX;
        y += amountToMoveY;

编辑:

        //x is the enemies (this x) and the same for y


        int MoveToX = Board.playerOne.getX();
        int MoveToY = Board.playerOne.getY();

        int diffX = MoveToX - x;
        int diffY = MoveToY - y;

        float angle = (float)Math.atan2(diffY, diffX);

        x += speed * Math.cos(angle);
        y += speed * Math.sin(angle);

我的新算法是这样的。但是我遇到了同样的问题,那就是我的敌人和我一样快,而对玩家则是负面的。

1 个答案:

答案 0 :(得分:0)

int diffX = moveToX - x;
int diffY = moveToY - y;

float angle = (float)Math.atan2(diffY, diffX);

x += speed * Math.cos(angle);
y += speed * Math.sin(angle);

diffXdiffY是从敌人到玩家的向量的组成部分。这样,您可以通过采用矢量分量的反正切来计算角度。 Math.cos(angle)是距离向量x的标准化<diffX, diffY>分量 - &gt; (cos^2(x) + sin^2(x) = 1),并乘以speed,可以得出敌人在x方向移动的速度。相同的规则适用于yMath.sin(angle)