Как сделать движение объектов медленнее - PullRequest
0 голосов
/ 30 июня 2018

Я сделал этот код для создания пузырей, которые перемещаются с правой стороны на левую сторону экрана в tkinter:

from tkinter import *
window = Tk()
c = Canvas(window, width=800, height=500, bg="darkblue")
c.pack()
list1 = list()
speedlist = list()
from random import randint
def create_bubble():
     id1 = c.create_oval(randint(50, 70), randint(210, 240), randint(910, 930), randint(240, 260), outline="white")
     list1.append(id1)
     speedlist.append(randint(1, 10))
def move_bubbles():
    for i in range(len(list1)):
        c.move(list1[i], -speedlist[i], 0)
while True:
    if randint(1, 10) == 1:
        create_bubble()
    move_bubbles()
    window.update()

Они двигаются очень хорошо, но так быстро, как кошки преследуют некоторых мышей. Вы почти не можете их видеть. Конечно, я могу установить скорость между небольшими числами, но это было бы глупо, и я хочу знать причину проблемы. Кто-нибудь может мне помочь? Спасибо!

Ответы [ 2 ]

0 голосов
/ 30 июня 2018

В настоящее время созданный цикл вызывает функцию move_bubbles() недетерминированное количество раз в секунду.

Было бы правильно привязать каждое движение к тому, сколько времени прошло от одного выполнения функции к другому, и использовать коэффициент скорости:

import time
t1=time.time()

speed=0.2 #tweak it

#...
def move_bubbles():
    delta_time=time.time()-t1
    t1=time.time()
    for i in range(len(list1)):
        c.move(list1[i], delta_time*speed*-speedlist[i], 0)
0 голосов
/ 30 июня 2018

Можно просто уменьшить скорость пузырьков, заменив

speedlist.append(randint(1, 10))

Автор:

ratio = 0.1
speedlist.append(randint(1, 10) * ratio)

Пузыри будут в 10 раз медленнее.

...