我是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
我试图减少睡眠时间并减少旋转量,但仍然没有结果...
答案 0 :(得分:0)
令我担心的是,您能够成功调用bob.update()
,因为在Python 3或Python 2发行的标准turtle.py中,update()
不是Turtle
的方法。您可能使用的是较旧的或非标准的turtle实施,因此可能需要调整以下某些内容。
让我们使用乌龟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()
这还应该允许我们通过单击窗口来干净地退出程序,而不会生成所有那些警告消息。