如何移动在设备上下文python中绘制的对象

时间:2008-09-24 12:12:05

标签: python animation

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

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

2 个答案:

答案 0 :(得分: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。也许你可以使用它,它也有一些教程。

答案 1 :(得分:0)

要在起始坐标(x1, y1)和目标坐标(x2,y2)之间平滑移动对象,您需要首先问自己,对象应该如何 long 才能到达目的地。假设您希望对象以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)

这仅仅是Euler's method,应该足以满足动画目的。