Деградация скорости анимации turtle Python

Рейтинг: 2Ответов: 1Опубликовано: 10.01.2023
import turtle
import time

def main():
    window = turtle.Screen()
    window.bgcolor('blue'), window.setup(500, 500)
    turtle.tracer(0)
    moon = turtle.Turtle()
    moon.speed(0), moon.hideturtle(), moon.penup(), moon.color('orange')

    dark = turtle.Turtle()
    dark.hideturtle(), dark.speed(0), dark.penup(), dark.color('blue')
    while True:
        start = time.time()
        for x in range(230,  -231, -1):
            moon.dot(230)
            dark.goto(x, 0)
            dark.dot(230)
            turtle.update()
            dark.clear()
        else:
            print(f'Время {time.time() - start}')

main()

Происходит деградация скорости после каждого прохождения круга. Почему такое происходит? Параметры speed(), tracer() менять пробовал, но появляются мерцания. Можно ли как-то это исправить? Первый тест проходит за 7-8 секунд, а второй раз уже 21 секунду, постоянно идет такой линейный упадок скорости.

Ответы

▲ 0Принят

Дело в том, что Вы не очищаете объект moon. Если запустить Вашу программу и открыть диспетчер задач, будет видно, как быстро растут затраты ОЗУ. Из-за этого и происходит деградация времени.

В итоге, такой код работает корректно:

import turtle
import time

def main():
    window = turtle.Screen()
    window.bgcolor('blue'), window.setup(500, 500)
    turtle.tracer(0)
    moon = turtle.Turtle()
    moon.speed(0), moon.hideturtle(), moon.penup(), moon.color('orange')

    dark = turtle.Turtle()
    dark.hideturtle(), dark.speed(0), dark.penup(), dark.color('blue')
    while True:
        start = time.time()
        for x in range(230,  -231, -1):
            moon.dot(230)
            dark.goto(x, 0)
            dark.dot(230)
            turtle.update()
            dark.clear()
            moon.clear()
            time.sleep(0.005)  # Для замедления анимации
        else:
            print(f'Время {time.time() - start}')

main()