众所周知,turtle能够像画笔一样来作图。一个绘图程序运行后,我们能够像看动画一样观看整个绘图过程。但是今天说的动画可和它不太一样。
我们可以用下面的函数调整画笔的速度。
1 2
| turtle.speed(1) turtle.speed(10)
|
在官方文档中,turtle.speed()
的参数是0-10的整数,从1
到10
速度递增。0
比较特殊,速度最快,几乎是瞬间完成。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| import turtle, time
t1 = turtle.Turtle() t2 = turtle.Turtle() t3 = turtle.Turtle()
pens = [t1, t2, t3]
for i in range(len(pens)): pens[i].pu() pens[i].goto(-100, -100 + 50 * i) pens[i].pd()
t1.speed(1) t2.speed(5) t3.speed(0)
t1.fd(300) time.sleep(2) t2.fd(300) time.sleep(2) t3.fd(300)
|
效果比较明显:
可以说,这是一种动画的效果,毕竟能够看到绘画的全过程嘛。但是这个不是今天的重点,今天要讲的是真正的动画。
赶紧进入正题,要想使画面动起来,肯定是先画出主体,再将它移动。这里我们先看一个奇葩转圈图。
“很快啊!” ——马老师
下面看一下代码,为什么画完之后会转起来?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| import turtle
turtle.speed(0) turtle.Screen().bgcolor('black')
def arm(col): turtle.begin_fill() turtle.color(col) turtle.fd(60) turtle.lt(60) turtle.fd(60) turtle.rt(60) turtle.fd(60) turtle.rt(60) turtle.fd(60) turtle.lt(60) turtle.fd(60) turtle.lt(120) turtle.fd(120) turtle.lt(60) turtle.fd(120) turtle.lt(60) turtle.fd(120) turtle.lt(120) turtle.end_fill()
def turn(angle): turtle.seth(angle) arm('red') turtle.lt(60) arm('orange') turtle.lt(60) arm('yellow') turtle.lt(60) arm('green') turtle.lt(60) arm('blue') turtle.lt(60) arm('purple') turtle.lt(60) turtle.hideturtle()
angle = 0
while True: turtle.clear() turn(angle) turtle.tracer(n=1000000000) angle += 15
|
这里两个自定义函数都很好理解,主要看一下 turtle.tracer()
,它的意思大概是将之前画过的作品重复一次,n
的大小就是重复的速度,也就是说n
如果很大,就可以瞬间完成刚才的画作。所以循环中的过程可以理解为(图有些丑):
graph TD
B((开始)) -->C{while True}
C --> D[clear清屏]
D[clear清屏] --> E[seth改变角度]
E[seth改变角度] --> F[tracer再画一次]
F[tracer再画一次] --> G[角度增加15]
G[角度增加15] --> C
所以,图中的6个arm就转起来了,修改每次循环的角度可以调整旋转速度和方向哦。(负数为反方向)