我一直在尝试使用矢量以角度移动物体,但我确实让它工作,但是,当我尝试将物体移动到特定点时,它会到达然后消失。在我的代码中,我测试是否在下一步中它是否会到达它的目的地,如果它将,它将它捕捉到目的地。
void Dot::moveToVector(Vector& vec)
{
float dx;
float dy;
dx = vec.X - position.X;
dy = vec.Y - position.Y;
Vector distanceVec(dx, dy);
float distance = distanceVec.Length();
float scale;
scale = speed / distance;
velocity.X = dx * scale;
velocity.Y = dy * scale;
if(velocity.X < scale || velocity.Y < scale)
{
velocity.X = 0;
velocity.Y = 0;
position.X = vec.X;
position.Y = vec.Y;
}
move();
}
当我调试它时,在它捕捉到位置后的一帧,位置的x和y值= -nan(0x400000)。
答案 0 :(得分:2)
scale = speed / distance;
如果distance == 0
您认为会发生什么?
答案 1 :(得分:2)
当物体到达目标位置时,距离变为零。然后你按距离划分。我怀疑这就是你的对象消失的原因!
这是一种更直接的设置方式:
void Dot::moveToVector(Vector& vec)
{
Vector distanceVec = vec - position;
float distance = distanceVec.Length();
if(distance <= speed)
{
velocity.X = 0;
velocity.Y = 0;
position.X = vec.X;
position.Y = vec.Y;
}
else
{
Vector direction = (distanceVec / distance);
velocity = direction * speed;
}
move();
}