Черепаха графика Черепаха замедляется - PullRequest
0 голосов
/ 26 сентября 2018

Я установил самую быструю черепаху, и когда я запускал только первый цикл, все было хорошо, но когда я добавил больше, он стал сопоставим с тем, когда он только выполнял первый цикл.Я не знаю, является ли это только из-за сложности рисунка, но для завершения формы требуется довольно много времени.Есть ли что-нибудь, что я могу сделать, чтобы это исправить?

import turtle

turtle.bgcolor("Red")
turtle.color("Yellow", "Pink")
turtle.shape("turtle")
turtle.begin_fill()
turtle.speed("fastest")

while True:
    turtle.forward(300)
    turtle.left(179)
    turtle.circle(20)
    if abs(turtle.pos()) < 1:
        break

turtle.setheading(270)



while True:
    turtle.forward(300)
    turtle.left(179)
    turtle.circle(20)
    if abs(turtle.pos()) < 1:
        break

turtle.setheading(180)


while True:
    turtle.forward(300)
    turtle.left(179)
    turtle.circle(20)
    if abs(turtle.pos()) < 1:
        break

turtle.setheading(90)


while True:
    turtle.forward(300)
    turtle.left(179)
    turtle.circle(20)
    if abs(turtle.pos()) < 1:
        break


turtle.end_fill()



turtle.getscreen()._root.mainloop()

1 Ответ

0 голосов
/ 26 сентября 2018

Мой анализ состоит в том, что ваше заполнение, то есть turtle.begin_fill() и turtle.end_fill(), замедляет код 3X до реального эффекта.Одно из этих изображений - с заполнением, одно - без :

enter image description here

Если вы не можетеоцените разницу (даже в полном размере), тогда заполнение, вероятно, просто пустая трата времени.Если вы просто хотите получить окончательное изображение и не заботитесь о том, чтобы оно было нарисовано, для большей производительности я предлагаю что-то вроде:

from turtle import Screen, Turtle

screen = Screen()
screen.bgcolor("Red")
screen.tracer(False)

turtle = Turtle(visible=False)
turtle.color("Yellow", "Pink")

for heading in range(0, 360, 90):

    turtle.setheading(heading)

    turtle.begin_fill()

    while True:
        turtle.forward(300)
        turtle.left(179)
        turtle.circle(20)
        if abs(turtle.pos()) < 1:
            break

    turtle.end_fill()

screen.tracer(True)
screen.mainloop()
...