我有一个敌人和一个玩家。我要做的是让我的敌人在移动时不断跟随我的玩家。我有代码可以做到这一点,但是妖精的速度根据我的角色相对于敌人的位置而有所不同:例如当我在敌人的左边和敌人的左边时(敌人的负面),它移动超级快速,在我的球员。然而,当我向下和向右(敌人的正面)时,每件事都很好。有什么想法吗?
以下是我的敌人更新功能:
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);
我的新算法是这样的。但是我遇到了同样的问题,那就是我的敌人和我一样快,而对玩家则是负面的。
答案 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);
diffX
和diffY
是从敌人到玩家的向量的组成部分。这样,您可以通过采用矢量分量的反正切来计算角度。 Math.cos(angle)
是距离向量x
的标准化<diffX, diffY>
分量 - &gt; (cos^2(x) + sin^2(x) = 1
),并乘以speed
,可以得出敌人在x
方向移动的速度。相同的规则适用于y
和Math.sin(angle)
。