0

我是 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

我试图减少睡眠时间以及减少旋转量,但仍然没有结果......

4

1 回答 1

0

我担心你能够bob.update()成功调用,因为update()它不是Turtle随 Python 3 或 Python 2 发布的标准 turtle.py 中的方法。你可能使用的是旧的或非标准的海龟实现,所以一些下面可能需要调整。

而不是time.sleep()与海龟自己的事件处理程序不同步的引入,让我们使用海龟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()

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

于 2020-09-27T03:47:34.507 回答