一、课程介绍
本节课将利用所学习的知识,制作一个空投物资的动画效果。
二、重难点解析
whileTrue
while True:
...
当 while 循环中的代码执行到最后一行后,又会跳转到 while 循环处开始重新执行下一次循环。
获取画笔坐标
通过 xcor() 可以获取到画笔的 x 坐标值,通过 ycor() 可以获取到画笔的 y 坐标值,如果画笔是图片的话,xcor() 和 ycor() 表示的就是图片的中心位置。
画笔.xcor() 获取画笔的 x 坐标
画笔.ycor() 获取画笔的 y 坐标
动画制作
实现动画,要先确定好动画过程中不断切换的图形,确保不断画出的图形有不同的细节。
在代码一开始使用 turtle.tracer(0) 取消绘画踪迹,让后面要画的图形能够一瞬间画出来,并隐藏着。
正式进入循环画图的阶段:
画第一个图形,
使用 turtle.update() 更新窗口,显示出这个瞬间画出的隐藏图形,
清空第一个图形;
画第二个图形,
使用 turtle.update() 更新窗口,显示出这个瞬间画出的隐藏图形,
清空第二个图形;
画第三个图形,
使用 turtle.update() 更新窗口,显示出这个瞬间画出的隐藏图形,
清空第三个图形;
......
一直不断重复这个过程,即可看到最终的动画效果。
三、单词卡
desert [ˈdezərt] 沙漠
box [bɑːks] 箱子
phone [foʊn] 电话
四、小试牛刀
4.1 源码操作
编程实现一个简单的计时器,接收一个输入的数字后,开始倒计时到 0 时停止。
import turtle
import time
p = turtle.Pen()
p.ht()
t = int(input('请输入倒计时的时间:'))
while t >= 0:
p.clear()
p.write(str(t), font=('', 50))
time.sleep(1)
t -= 1
turtle.done()
4.2 源码操作
你能根据提示信息绘制出这样的一个灯泡吗?
提示:
1.灯头pensize为40,颜色为蓝色(blue)
⒉灯壳底部,也就是靠近灯头处,灯壳的pensize为50;灯壳顶部,灯壳的pensize为100
3.灯壳颜色为金色(gold)
import turtle
p = turtle.Pen()
p.ht()
p.left(90)
p.pencolor('blue')
p.pensize(40)
p.forward(50)
size = 50
p.pencolor('gold')
for i in range(10):
p.pensize(size)
p.forward(5)
size += 5
turtle.done()
五、扩展创作
import turtle
turtle.bgpic('desert.gif')
turtle.tracer(0)
p = turtle.Pen()
turtle.addshape('box.gif')
p.shape('box.gif')
p.pencolor('coral')
p.left(90)
p.penup()
p.goto(0,400)
p.pendown()
while p.ycor()>-200:
p.forward(100)
for i in range(150):
p.pensize(i*1.5)
p.forward(1)
p.pensize(1)
p.forward(-250)
turtle.update()
p.forward(-1)
p.clear()
turtle.done()
六、大开脑洞
赶快将你们的空投物资变成手机吧!
import turtle
turtle.bgpic('desert.gif')
turtle.tracer(0)
p = turtle.Pen()
turtle.addshape('phone.gif')
p.shape('phone.gif')
p.pencolor('coral')
p.left(90)
p.penup()
p.goto(0,400)
p.pendown()
while p.ycor()>-200:
p.forward(100)
for i in range(150):
p.pensize(i*1.5)
p.forward(1)
p.pensize(1)
p.forward(-250)
turtle.update()
p.forward(-1)
p.clear()
turtle.done()