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();
}

デバッグしたとき、位置にスナップしてから1フレーム後、位置の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 に答える