python - 动画两个具有不同速度的对象
问题描述
该脚本显示了以相同速度移动两个方块。如何设置不同的速度?谢谢!
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()
解决方案
从你的物理课上记住v = dx/dt
:
速度=位置变化/时间变化
在这里应用它。时间变化在此指定为time.sleep(0.2)
- 1/5 秒。您可能不想更改它,因此您可以更改以修改速度的另一件事是每个时间片的位置变化。
这就是canvas.move()
进来的地方 - 这是位置的变化。您在脚本中调用了两次,一次 forrc1
和一次 for rc2
,两次都使用相同的x
and 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)
最后一种解决方案是最灵活的,也是您可能应该依赖的。
推荐阅读
- python - Django rest framework show or hide API objects with checkbox in admin
- java - t0 如何替换数组或对象元素并删除未使用的重复元素
- php - OS X 10.15.1 Catalina 上的 PHP 7.1 和 Brew 上的 PHP 7.3 冲突
- typescript - 如何根据值过滤记录键?
- reactjs - 有没有办法检查用户在 React 中所做的任何状态更改?
- python - 如何正确包装使用 qt 和 shiboken2 的 c++ 库?
- jquery - 表单未提交,单击提交按钮时没有任何反应
- node.js - 如何配置 babelify 将 javascript 文件转换为兼容 IE 11
- python - 从图像坐标反向投影到世界坐标(相对于地图)?
- c# - 如何使用 InOut 参数作为 RefCursor 调用 Postgres V11 存储过程(非函数)?使用 Npgsql v4.0.8