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

它接受的参数之一是平移时应覆盖的像素数。

关于上面的代码,Animator_Body_XAnimator_Body_Y是 类型DoubleAnimation,然后应用于机器人的TranslateTransform对象:Translate_Body


我面临的问题是机器人(它是一个画布)根据输入的距离以不同的速度移动。因此,距离越远,机器人移动的越快!换个角度来看,如果输入的距离是20,机器人移动得相当慢,但如果输入的距离是800,它就会从屏幕上射出。

我需要使这个速度恒定,与输入的距离无关。

我想我需要根据输入的距离调整一些Animator_Body_XAnimator_Body_Y属性,但我不知道要准确调整什么(我认为一些数学也必须完成)。

以下是您可能想要查看的属性列表以解决此问题。DoubleAnimation

4

2 回答 2

2

你有理由使用 DoubleAnimation 吗?DoubleAnimation 旨在根据需要在特定时间段的开始/结束时使用线性插值加速/减速在特定时间段内从 A 到 B 取值(这就是为什么它对于更长的距离“更快”.. 它还有更远的路要走在同一时间!)。从外观上看,您尝试做的是根据它所面对的方向在每个“帧”移动固定距离的东西?这似乎不适合我。

您可以根据距离计算动画的长度,因此距离越长,长度越长,然后项目始终以相同的“速度”移动。对我来说,自己移动项目更有意义。您可以根据角度标准计算对象速度,然后每个“帧”都可以根据该速度手动移动项目所需的距离。使用这种方法,如果需要,您还可以轻松地对速度施加摩擦等。

于 2009-02-15T12:09:18.957 回答
1

你必须做的数学是:速度*时间=距离

因此,要保持速度恒定,您必须更改动画的持续时间:

double pixelsPerSecond = 5;
animation.Duration = TimeSpan.FromSeconds(distance/pixelsPerSecond);

顺便说一句,我不认为动画是移动机器人的最佳解决方案。

于 2009-02-16T09:34:42.657 回答