English 中文(简体)
如何移动在设备上下文python中绘制的对象
原标题:
  • 时间:2008-09-24 12:12:04
  •  标签:

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

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

问题回答

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

您可以保持固定的背景,每次移动时只重新绘制可移动元素。基本上就是这样做的。

要想在一条线上平滑地移动一个对象,你必须这样做(我还没有准备好程序,所以只能给你一个想法):

  • choose the start and end position: point A(x1, y1) and B(x2, y2)
  • choose in how much time the object should change position from A to B (say 10 seconds).
  • use a timer set to a certain interval (say 2 seconds)
  • calculate the delta X and Y that the object should change for each timer interval. In this case dx = (x2-x1)*2/10 and dy = (y2-y1)*2/10
  • in the timer callback increment the current object position with dx and dy and redraw the image

这就是算法。

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

要在起始坐标(x1,y1)和目标坐标之间平滑移动对象,您需要首先问自己,对象到达目的地需要多长时间。假设您希望对象以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的方法,并且应该足以用于动画目的。





相关问题
热门标签