-1

我已经使用 python 在设备上下文中绘制了一个图像,我想平滑地移动它/垂直或水平动画。

我应该使用什么算法?我在哪里可以获得有关 python 中此类任务的信息?

4

2 回答 2

1

一旦在设备上下文中绘制了一个对象,它就会停留在那里。如果要移动它,则需要重新绘制它。

您可以保持固定的背景,并且仅在每次移动时重绘可移动元素。基本上就是这样完成的。

要将对象平稳地移动到一条线上,您必须执行以下操作(我没有准备好程序,所以只能给您一个想法):

  • 选择开始和结束位置:点 A(x1, y1) 和 B(x2, y2)
  • 选择对象应在多长时间内将位置从 A 更改为 B(例如 10 秒)。
  • 使用设置为特定时间间隔的计时器(比如 2 秒)
  • 计算对象应在每个计时器间隔内更改的增量 X 和 Y。在这种情况下 dx = (x2-x1)*2/10 和 dy = (y2-y1)*2/10
  • 在计时器回调中,使用 dx 和 dy 增加当前对象位置并重绘图像

那将是算法。

我建议你也看看PyGame。也许你可以使用它,它也有一些教程。

于 2008-09-24T12:15:05.607 回答
0

(x1, y1)要在起始坐标和目标坐标之间平滑移动对象(x2,y2),您首先需要问自己,对象需要多长时间才能到达目的地。假设您希望对象以t时间单位(可能是秒、小时等)到达那里。一旦确定了这一点,就可以轻松地计算每单位时间的位移:

dx = (x2-x1)/t
dy = (y2-y1)/t

现在您只需在每单位时间添加(dx,dy)到对象的位置 ( (x,y), 初始(x1,y1)),并在对象到达目的地的某个阈值距离内时停止。这是为了解释除法错误会累积的事实,所以如果你做了一个相等检查,比如:

(x,y)==(x2,y2)

这不太可能是真的。

请注意,上述方法为您提供恒定速度、直线运动。您可能希望改用某种稍微复杂一点的公式,让对象看起来像是加速、保持巡航速度,然后减速。以下公式可能会很有用:

v(t) = u(t) + t*a(t)
x(t) = v(t) + t*v(t)

这只是欧拉的方法,应该足以用于动画目的。

于 2008-09-24T13:45:34.813 回答