如何让雪花旋转的更顺畅?
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 干净地退出程序,而不会生成所有这些警告消息。
我是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 干净地退出程序,而不会生成所有这些警告消息。