1

このプログラミングゲームを参考に、現在制作中です。

キャンバスを特定の距離に、現在の角度に従って移動 (変換) する以下のメソッドを作成しました。

private void MoveBot(double pix, MoveDirection dir)
    {
        if (dir == MoveDirection.Forward)
        {
            Animator_Body_X.To = Math.Sin(HeadingRadians) * pix;
            Animator_Body_Y.To = ((Math.Cos(HeadingRadians) * pix) * -1);
        }
        else
        {
            Animator_Body_X.To = ((Math.Sin(HeadingRadians) * pix) * -1);
            Animator_Body_Y.To = Math.Cos(HeadingRadians) * pix;
        }

        Animator_Body_X.To += Translate_Body.X;
        Animator_Body_Y.To += Translate_Body.Y;

        Animator_Body_X.From = Translate_Body.X;
        Translate_Body.BeginAnimation(TranslateTransform.XProperty, Animator_Body_X);

        Animator_Body_Y.From = Translate_Body.Y;
        Translate_Body.BeginAnimation(TranslateTransform.YProperty, Animator_Body_Y);

        TriggerCallback();
    }

受け入れるパラメーターの 1 つは、変換時にカバーする必要があるピクセル数です。

上記のコードに関して、Animator_Body_XAnimator_Body_YはタイプDoubleAnimationであり、ロボットのTranslateTransformオブジェクトに適用されます。Translate_Body


私が直面している問題は、入力された距離に応じて、ロボット (キャンバス) が異なる速度で移動していることです。したがって、距離が長いほど、ロボットは速く動きます! つまり、入力された距離が の20場合、ロボットの動きはかなり遅くなりますが、入力された距離が の場合、800文字通り画面から飛び出します。

入力された距離に関係なく、この速度を一定にする必要があります。

Animator_Body_X入力された距離に応じてとプロパティのいくつかを微調整する必要があると思いますが、Animator_Body_Y何を正確に微調整すればよいかわかりません (数学も行う必要があると思います)。

これを理解するために見てみたいと思うかもしれないプロパティリストを次に示します。DoubleAnimation

4

2 に答える 2

2

DoubleAnimation を使用している理由はありますか? DoubleAnimation は、必要に応じて、その期間の開始/終了時に線形補間の加速/減速を使用して、特定の期間にわたって A から B までの値を取るように設計されています (これが、より長い距離に対して「高速」である理由です..さらに先に進む必要があります)同じ時に!)。あなたがやろうとしているのは、物事が向いている方向に応じて、「フレーム」ごとに一定の距離を移動することですか?それは私には合わないようです。

距離に応じてアニメーションの長さを計算できるため、距離が長いほど長さが長くなり、アイテムは常に同じ「速度」で移動します。私にとっては、アイテムを自分で移動する方が理にかなっています。角度基準に基づいてオブジェクトの速度を計算できます。次に、各「フレーム」で、その速度に基づいて必要なだけアイテムを手動で移動できます。この方法を使用すると、必要に応じて速度に摩擦などを簡単に適用することもできます。

于 2009-02-15T12:09:18.957 に答える