前面几节课画的都是静态图案。这节课开始,我们让海龟动起来!弹跳球、逐步画房子、增长圆——用代码"演动画"!
一、动画的原理:逐帧播放
动画其实是很多张"静态图片"快速切换。我们的眼睛以为画面在动。
# turtle 动画三步曲:
t.tracer(0) # 第1步:关闭自动刷新(加快速度)
while True:
画一帧内容 # 第2步:画这一帧
t.update() # 第3步:刷新屏幕,显示这一帧
把这3步放在一个循环里,海龟就会动起来!
二、实战:弹跳小球 🏀
import turtle
t = turtle.Turtle()
t.penup()
t.hideturtle()
t.tracer(0) # 关闭自动刷新
ball_x, ball_y = 200, 100
dx, dy = 3, 2
RADIUS = 15
while True:
# 更新位置(先算好,再画)
ball_x += dx
ball_y += dy
# 清除上一帧,画这一帧
t.clear()
t.pencolor("red")
t.fillcolor("orange")
t.begin_fill()
t.penup()
t.goto(ball_x, ball_y)
t.pendown()
t.circle(RADIUS)
t.end_fill()
# 碰到边界就反弹(默认屏幕 800x600,x:±400, y:±300)
if ball_x > 385 or ball_x < -385:
dx = -dx
if ball_y > 285 or ball_y < -285:
dy = -dy
t.update() # 显示这一帧
turtle.mainloop()三、实战:逐步画房子 🏠
import turtle
t = turtle.Turtle()
t.tracer(0) # 加速画图
t.pensize(2)
frame = 0
# === 逐步画外墙 ===
for x in range(0, 151, 3):
t.clear()
t.color("navajowhite", "wheat")
t.begin_fill()
t.goto(x, 0)
t.goto(x, 100)
t.goto(0, 100)
t.goto(0, 0)
t.end_fill()
frame += 1
if frame >= 50:
break
t.update()
# === 逐步画屋顶 ===
for i in range(51):
t.clear()
t.color("firebrick", "tomato")
t.begin_fill()
t.goto(75, 160) # 尖顶
t.goto(i, 100) # 逐渐变宽
t.goto(150 - i, 100)
t.end_fill()
frame += 1
if frame >= 100:
break
t.update()
# === 画门 ===
t.clear()
t.color("saddlebrown", "chocolate")
t.begin_fill()
t.goto(80, 0)
t.goto(80, 70)
t.goto(120, 70)
t.goto(120, 0)
t.end_fill()
# === 画两扇窗户 ===
for wx in [25, 115]:
t.color("steelblue", "lightskyblue")
t.begin_fill()
t.goto(wx, 50)
t.goto(wx, 80)
t.goto(wx + 25, 80)
t.goto(wx + 25, 50)
t.end_fill()
t.update()
turtle.mainloop()看着房子一点一点建起来,是不是很有成就感!🏗️
四、实战:不断增长的圆 📈
import turtle
t = turtle.Turtle()
t.penup()
t.hideturtle()
t.tracer(0)
t.pencolor("royalblue")
t.pensize(3)
for r in range(5, 200, 2): # 半径从5增长到200
t.clear()
t.circle(r)
t.update()
turtle.mainloop()循环结束后,小圆变大圆,渐进动画效果!📈
五、tracer() 参数说明
| 命令 | 效果 |
t.tracer(0) | 关闭自动刷新,最快速度(动画用) |
t.tracer(1) | 每帧刷新一次(正常速度) |
t.tracer(n) | 每 n 帧刷新一次(数字越大越慢) |
t.update() | 手动刷新屏幕(配合 tracer(0) 使用) |
六、小挑战
-
- 🟢 简单:让弹跳球的颜色随位置变化(x越大越红,y越大越蓝)
-
- 🟡 中等:画3个不同颜色的小球同时弹跳
-
- 🔴 困难:画一个弹跳的彩色星星(用第6课的星星代码)
-
七、下期预告
动画基础已掌握!下节课学习按键交互——用键盘控制海龟移动,像玩游戏一样!
下期:《turtle第9课:键盘控制海龟》
有问题欢迎留言!