代码之家  ›  专栏  ›  技术社区  ›  jasan

以不同的速度动画两个对象

  •  -2
  • jasan  · 技术社区  · 5 年前

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

    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()
    
    1 回复  |  直到 5 年前
        1
  •  1
  •   Green Cloak Guy    5 年前

    记得你上物理课的时候, v = dx/dt :

    在这里应用。时间变化在这里由 time.sleep(0.2) -1/5秒。你可能不想改变它,所以你可以改变另一个改变速度的方法是 位置变化 对于每个时间片。

    这是哪里 canvas.move() 进来-这是位置的改变。你在剧本里说了两次,一次是为了 rc1 还有一次 rc2 ,两次都是一样的 x y . 因为位置的变化是一样的,时间的变化也是一样的, rc1型 rc2型 会以同样的速度移动。

    解决方案?只是使用不同的变量。说我们想要 rc2型 rc1型 同一方向:

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

    或者说我们想要 rc1型 沿着 rc2型 移动相同的距离 是的 取而代之的是轴:

    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)
    

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