首页 > 解决方案 > 动画两个具有不同速度的对象

问题描述

该脚本显示了以相同速度移动两个方块。如何设置不同的速度?谢谢!

import tkinter as tk
import time

root = tk.Tk()
canvas = tk.Canvas(root, width=400, height=400)
canvas.pack()

rc1 = canvas.create_rectangle(20, 260, 120, 360, outline='white', fill='blue')
rc2 = canvas.create_rectangle(20, 20, 120, 120, outline='white', fill='red')

for x in range(100):
    y = 0
    x = 5
    time.sleep(0.2)
    canvas.move(rc1, x, y)
    canvas.move(rc2, x, y)
    canvas.update()

root.mainloop()

标签: pythontkinter

解决方案


从你的物理课上记住v = dx/dt

速度=位置变化/时间变化

在这里应用它。时间变化在此指定为time.sleep(0.2)- 1/5 秒。您可能不想更改它,因此您可以更改以修改速度的另一件事是每个时间片的位置变化。

这就是canvas.move()进来的地方 - 这是位置的变化。您在脚本中调用了两次,一次 forrc1和一次 for rc2,两次都使用相同的xand y。由于位置的变化是一样的,时间的变化也是一样的,rc1并且rc2会以同样的速度移动。

解决方案?只需使用不同的变量。假设我们想rc2以两倍的速度rc1向同一个方向移动:

canvas.move(rc1, x, y)
canvas.move(rc2, 2*x, 2*y)

或者说我们想要rc1沿着x轴移动,而我们想要rc2移动相同的距离但沿着y轴移动:

canvas.move(rc1, x, y)
canvas.move(rc2, y, x)

或者我们希望它们以完全不同的轨迹和速度移动:

x1, y1 = 5, 0
x2, y2 = -13, 7
canvas.move(rc1, x1, y1)
canvas.move(rc2, y2, x2)

最后一种解决方案是最灵活的,也是您可能应该依赖的。


推荐阅读