Чтобы плавно переместить объект между начальной координатой (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)
Это просто Euler's method, и должно быть достаточно для анимации.
Это дубликат http://stackoverflow.com/questions/126761/how-can-i-move-an-object-drawn-in-device-context-python? Не могли бы вы закрыть один или другой? – 2008-09-24 13:11:24
Вам нужно сказать, какую графическую библиотеку вы используете. – wnoise 2008-10-10 07:06:02