python 乌龟动画太快了
Turtle animation is so fast in python
我做了风车,但它转得很快。我使用 turtle 库来做到这一点,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)
您可以使用内置 time
模块中的 sleep
方法:
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)
一种更平滑的方法是减少while
循环每次迭代的left
数量:
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!
How can I do that animation at normal speed?
不要在像 turtle 这样的事件驱动世界中使用 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()
(以毫秒为单位)以控制动画运行的速度。
我做了风车,但它转得很快。我使用 turtle 库来做到这一点,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)
您可以使用内置 time
模块中的 sleep
方法:
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)
一种更平滑的方法是减少while
循环每次迭代的left
数量:
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!
How can I do that animation at normal speed?
不要在像 turtle 这样的事件驱动世界中使用 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()
(以毫秒为单位)以控制动画运行的速度。