1

我一直在尝试使用向量以一定角度移动对象,并且确实可以正常工作,但是,当我尝试将对象移动到特定点时,它会到达那里然后消失。在我的代码中,我测试它是否会在下一步中到达目的地,如果会,我将其捕捉到目的地。

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)。

4

2 回答 2

2
scale = speed / distance;

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

于 2013-01-30T01:56:32.543 回答
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();
}
于 2013-01-30T01:57:46.333 回答