C++ 当使用矢量数学将某物移动到某个点时,敌人到达该点,然后消失

C++ 当使用矢量数学将某物移动到某个点时,敌人到达该点,然后消失,c++,sdl,C++,Sdl,我一直在尝试用向量来移动物体,使其成一定角度,但是,当我尝试将物体移动到一个特定的点时,它会到达那里,然后消失。在我的代码中,我测试在下一步中它是否会到达目的地,如果会,我将它捕捉到目的地 void Dot::moveToVector(Vector& vec) { float dx; float dy; dx = vec.X - position.X; dy = vec.Y - position.Y; Vector distanceVec(dx

我一直在尝试用向量来移动物体,使其成一定角度,但是,当我尝试将物体移动到一个特定的点时,它会到达那里,然后消失。在我的代码中,我测试在下一步中它是否会到达目的地,如果会,我将它捕捉到目的地

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();
}
void Dot::moveToVector(Vector和vec)
{
浮动dx;
浮动dy;
dx=向量X-位置X;
dy=向量Y-位置Y;
向量距离向量(dx,dy);
浮动距离=距离向量长度();
浮标;
比例=速度/距离;
速度X=dx*刻度;
速度Y=dy*刻度;
if(速度.X
当我调试它时,在它捕捉到位置后的一帧,位置的x和y值=-nan(0x400000)

如果距离=0,你认为会发生什么


如果
距离==0
你认为会发生什么?

当你的物体到达目标位置时,距离变为零。那么你就是在除以距离。我怀疑这就是你的目标消失的原因

下面是一种更简单的设置方法:

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();
}
void Dot::moveToVector(Vector和vec)
{
向量距离向量=向量-位置;
浮动距离=距离向量长度();

如果(距离当你的物体到达目标位置时,距离变为零。然后你除以距离。我怀疑这就是你的物体消失的原因

下面是一种更简单的设置方法:

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();
}
void Dot::moveToVector(Vector和vec)
{
向量距离向量=向量-位置;
浮动距离=距离向量长度();

如果(距离我不熟悉sdl,但它看起来好像速度和速度实际上并没有在你的方法中的任何地方声明。它们是在其他地方声明的吗?我的坏蛋,我意识到它没有变为NULL。我只是添加了它。是的,速度和速度是在点对象中声明的。我想我需要添加有关它的信息,而这些信息并没有显示出来。)下次在我的代码中。我会记得的!我不熟悉sdl,但看起来速度和速度实际上并没有在方法中的任何地方声明。它们是在其他地方声明的吗?我的坏蛋,我意识到它没有变为NULL。我只是添加了它。是的,速度和速度在点对象中声明。我想我需要添加关于下一次我的代码中不会出现这种情况。我会记住的!非常感谢。我添加了一个距离测试,如果它等于零,则将其设置为速度。我正在学习每天不做什么!非常感谢。我添加了一个距离测试,如果它等于零,则将其设置为速度。我正在学习每天不做什么!感谢您的支持也回答!谢谢你的回答!