如何解决海龟动画在python中如此之快
我制作了风车,但它移动得如此之快。我使用乌龟库来做到这一点,t2
仅用于圆,t
是主要工作。我使用 tracer
/update
并在 tracer
中尝试了一些数字,但没有任何改变。如何以正常速度制作该动画?
import turtle
screen = turtle.Screen()
screen.tracer(0)
t2 = turtle.Turtle()
t2.speed(2)
t2.forward(50)
t2.setheading(90)
t2.circle(50)
t = turtle.Turtle()
t.speed(2)
def rectangle() :
t.penup()
t.forward(170)
t.left(90)
t.pendown()
t.forward(5)
t.left(90)
t.forward(120)
t.left(90)
t.forward(10)
t.left(90)
t.forward(120)
t.left(90)
t.forward(5)
def windmill():
for i in range(4):
rectangle()
t.penup()
t.goto(0,0)
t.pendown()
while True:
t.clear()
windmill()
screen.update()
t.left(10)
解决方法
您可以使用内置 sleep
模块中的 time
方法:
import turtle
from time import sleep # Imported here
screen = turtle.Screen()
screen.tracer(0)
t2 = turtle.Turtle()
t2.forward(50)
t2.setheading(90)
t2.circle(50)
t = turtle.Turtle()
def rectangle() :
t.penup()
t.forward(170)
t.left(90)
t.pendown()
t.forward(5)
t.left(90)
t.forward(120)
t.left(90)
t.forward(10)
t.left(90)
t.forward(120)
t.left(90)
t.forward(5)
def windmill():
for i in range(4):
rectangle()
t.penup()
t.goto(0,0)
t.pendown()
while True:
sleep(0.05) # Used here
t.clear()
windmill()
screen.update()
t.left(10)
更平滑的方法是减少 left
循环每次迭代的 while
数量:
import turtle
screen = turtle.Screen()
screen.tracer(0)
t2 = turtle.Turtle()
t2.forward(50)
t2.setheading(90)
t2.circle(50)
t2.speed(2)
t = turtle.Turtle()
t.speed(2)
def rectangle() :
t.penup()
t.forward(170)
t.left(90)
t.pendown()
t.forward(5)
t.left(90)
t.forward(120)
t.left(90)
t.forward(10)
t.left(90)
t.forward(120)
t.left(90)
t.forward(5)
def windmill():
for i in range(4):
rectangle()
t.penup()
t.goto(0,0)
t.pendown()
while True:
t.clear()
windmill()
screen.update()
t.left(0.2) # Reduced here!
,
如何以正常速度制作该动画?
不要在像乌龟这样的事件驱动的世界中使用 while True:
或 sleep()
!相反,使用海龟计时器事件:
from turtle import Screen,Turtle
def rectangle(t):
t.forward(50)
t.left(90)
t.backward(5)
t.pendown()
for _ in range(2):
t.forward(10)
t.right(90)
t.forward(120)
t.right(90)
t.penup()
def windmill(t):
for _ in range(4):
t.penup()
rectangle(t)
t.goto(0,0)
screen = Screen()
screen.tracer(0)
turtle = Turtle()
turtle.setheading(90)
def rotate():
turtle.clear()
windmill(turtle)
screen.update()
turtle.left(1)
screen.ontimer(rotate,40) # adjust speed via second argument
rotate()
screen.mainloop()
您可以将第二个参数调整为 ontimer()
(以毫秒为单位)以控制动画运行的速度。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。