Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 爪哇:敌人跟随玩家_Java - Fatal编程技术网

Java 爪哇:敌人跟随玩家

Java 爪哇:敌人跟随玩家,java,Java,我有一个敌人和一个球员。我要做的是让我的敌人在我的玩家移动时不断地跟随他。我有这样做的代码,但地精的速度是不同的,这取决于我的角色相对于敌人的位置:例如,当我站在敌人的左边,敌人的反面时,它移动得非常快,并且在我的玩家中。然而,当我情绪低落,面对敌人时,一切都很好。有什么想法吗 以下是我的敌人更新功能: MoveToX = Board.playerOne.getX(); MoveToY = Board.playerOne.getY(); floa

我有一个敌人和一个球员。我要做的是让我的敌人在我的玩家移动时不断地跟随他。我有这样做的代码,但地精的速度是不同的,这取决于我的角色相对于敌人的位置:例如,当我站在敌人的左边,敌人的反面时,它移动得非常快,并且在我的玩家中。然而,当我情绪低落,面对敌人时,一切都很好。有什么想法吗

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

        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;
编辑:

我的新算法是这样的。然而我也遇到了同样的问题,那就是我的敌人移动得和我一样快,而这对球员来说是负面的

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);

diffX和diffY是从敌人到玩家的向量的组成部分。这样,可以通过取向量分量的反正切来计算角度。Math.cosangle是距离向量的标准化x分量->cos^2x+sin^2x=1,将其乘以速度,即可得出敌人在x方向移动的速度。同样的规则也适用于y和Math.sinangle。

您有这些非常方便的amountToMoveX和amounttomovy变量。也许你可以启动调试器,看看它们的值是什么。您还应该检查其他相关变量的值。很可能其中一个不是你所期望的,而是你认为它与类型铸造有关。尝试使用double而不是float,并有两个变量:deltaX和deltaY而不是MoveToX-x和MoveToY-y。请报告您使用的所有变量的类型。仅供参考,您可以缩短Math.sqrtMath.powMoveToX-x,2+Math.powMoveToY-y,2;对数学来说,moveToX-x,MoveToY-y,虽然这不会改变/解决你的问题。我尝试了你上面的建议,但我仍然得到了我上面解释的问题:当我对敌人不利时,它的移动速度和玩家一样快。moveToX,x,MoveToY和y的单位是什么?它们应该是整数吗?据我所知,我认为它们不一定是整数。它们只需要通过图形可读即可。是的,它们是整数,但我可以将它们更改为浮点数。我将它们更改为浮点数,但仍然会遇到相同的问题。我会调试程序以查看到底发生了什么。如果实现正确,此代码可以工作。我在我的另一个游戏中使用了完全相同的技术。如果x^2+y^2不等于速度的平方,则存在问题。
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);