【发布时间】:2014-08-04 22:26:02
【问题描述】:
我有一个敌人和一个玩家。我想要做的是让我的敌人在我的玩家移动时不断地跟随他。我有这样做的代码,但是地精的速度会根据我的角色相对于敌人的位置而有所不同:例如,当我在敌人的左侧(敌人的负面)上时,它会移动超级快并且在我的播放器中。然而,当我在右下角(敌人的正面)时,一切都很好。有什么想法吗?
这是我的敌人更新功能中的内容:
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);
我的新算法是这样的。但是我遇到了同样的问题,那就是我的敌人移动得和我一样快,而它对玩家不利。
【问题讨论】:
-
你有这些非常方便的
amountToMoveX和amountToMoveY变量。也许你可以启动你的调试器,看看它们的值是什么。您还应该检查其他相关变量的值。很可能其中一个不是你所期望的 -
我认为这与类型转换有关。尝试使用 double 而不是 float 并有两个变量:deltaX 和 deltaY 而不是 (MoveToX - x) 和 (MoveToY - y)。
-
请报告您使用的所有变量的类型。
-
仅供参考,您可以将
Math.sqrt(Math.pow(MoveToX - x, 2) + Math.pow(MoveToY - y, 2));缩短为Math.hypot(MoveToX - x, MoveToY - y),尽管这不会改变/解决您的问题。
标签: java