如何让雪花旋转的更顺畅?

How to make the snowflake rotate more smoothly?

我是python动画的新手,虽然已经设法用动画让雪花旋转了,但旋转得不是很顺畅... 我附上了下面的代码,谁能建议我怎么做才能让它旋转得更顺畅?

import turtle
import time
bob = turtle.Turtle()
bob.ht()
screen = turtle.Screen()
bob.speed(100)
screen.tracer(0, 0)
n = 0
bob.pencolor("blue")
bob.pensize(5)

def vshape():
  bob.rt(25)
  bob.fd(50)
  bob.backward(50)
  bob.lt(50)
  bob.fd(50)
  bob.backward(50)
  bob.rt(25)

def snowflakeArm():
  for x in range(4):
    bob.fd(30)
    vshape()
  bob.backward(120)
    
def snowflake(n, x, y):
  bob.seth(n)
  bob.pu()
  bob.setpos(x ,y)
  bob.pd()
  for x in range(6):
    snowflakeArm()
    bob.rt(60)

while True:
  time.sleep(0.02)
  bob.update()
  bob.clear()
  snowflake(n, 0, 0)
  snowflake(n, 350, 0)
  snowflake(n, -350, 0)
  snowflake(n, 0, 350)
  snowflake(n, 0, -350)
  n += 10

我试过减少休眠时间和减少旋转量但仍然没有结果...

我担心你能够成功调用 bob.update(),因为 update() 不是标准 turtle.py 中 Turtle 的方法 Python 3 或 Python 2。您可能正在使用较旧的或 non-standard 海龟实现,因此可能需要调整以下某些内容。

与其引入与 turtle 自己的事件处理程序不同步的 time.sleep(),不如使用 turtle ontimer() 事件:

from turtle import Screen, Turtle

def vshape():
    turtle.right(25)
    turtle.forward(50)
    turtle.backward(50)
    turtle.left(50)
    turtle.forward(50)
    turtle.backward(50)
    turtle.right(25)

def snowflakeArm():
    for _ in range(4):
        turtle.forward(30)
        vshape()

    turtle.backward(120)

def snowflake(angle, position):
    turtle.setheading(angle)

    turtle.penup()
    turtle.setposition(position)
    turtle.pendown()

    for _ in range(360 // 60):
        snowflakeArm()
        turtle.right(60)

angle = 0

def snowflakes():
    global angle

    turtle.clear()

    snowflake(angle, (0, 0))
    snowflake(angle, (350, 0))
    snowflake(angle, (-350, 0))
    snowflake(angle, (0, 350))
    snowflake(angle, (0, -350))

    screen.update()

    angle = (angle + 10) % 360

    screen.ontimer(snowflakes, 25)  # repeat 25 milliseconds from now

screen = Screen()
screen.tracer(False)

turtle = Turtle()
turtle.hideturtle()
turtle.pencolor('blue')
turtle.pensize(5)

snowflakes()

screen.exitonclick()

这也应该允许我们通过单击 window 干净地退出程序,而不会生成所有这些警告消息。