Java:水平和垂直运动比对角线运动快

Java:水平和垂直运动比对角线运动快,java,math,angle,Java,Math,Angle,我最近计算了一些实体以中心的一个特定实体为目标,并使用此函数决定它们的移动方向: double xa = 0, ya = 0; double targetX = mother.getX(); double targetY = mother.getY(); double deltaX = targetX - x; double deltaY = targetY - y; double speed = 0.5d; double dir = Math.atan2(deltaY, deltaX);

我最近计算了一些实体以中心的一个特定实体为目标,并使用此函数决定它们的移动方向:

double xa = 0, ya = 0;

double targetX = mother.getX();
double targetY = mother.getY();

double deltaX = targetX - x;
double deltaY = targetY - y;
double speed = 0.5d;
double dir = Math.atan2(deltaY, deltaX);

xa += (speed * Math.cos(dir));
ya += (speed * Math.sin(dir));

从那时起,沿
对角线移动的实体比直接沿
垂直移动的实体和沿
水平移动的实体移动得稍慢。我怎样才能重新计算它们以相同的速度移动呢?

您的代码看起来是正确的。连续(
xa
xb
)之间的距离应始终完全相同

你只是在一个没有延迟或计时器的循环中完全运行吗?可能发生的情况是,
atan2
经过优化,当它的一个参数为零时(垂直和水平情况),计算速度更快,因此它在循环中运行得更快


我建议您使用以确保迭代的持续时间相等,将代码放在
时间任务中

从视觉上看,它的移动速度可能较慢,因为对角线方向上的距离比水平或垂直方向上的距离大。但是,速度总是一样的。我目前确实以某种方式解决了我的问题,如果实体以
对角线
方向移动,我刚刚在它的x上添加了
0.175
,我确实让它在计时器中运行,每秒60个循环。