анимация двух объектов с разной скоростью - PullRequest
0 голосов
/ 08 февраля 2019

Этот скрипт показывает движение двух квадратов с одинаковой скоростью.Как мне установить другую скорость?Спасибо!

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 Ответ

0 голосов
/ 08 февраля 2019

Помните из ваших уроков физики, 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 двигался вдоль оси 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)

Это последнее решениенаиболее гибким, и это то, на что вы, вероятно, должны полагаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...