DF-17简直太帅了!
哈喽,国庆后的一周过的特别的漫长吧,好不容易周末了,要是能再来一个长假就好了?
虽然不能像国庆那样在外high了?,但是这个周末能安安心心静下心来写点代码??,好像也很美好啊~
这周我们来写点什么呢?要不然还是写点和国庆相关的吧?
70周年国庆??最最大的主菜就是大阅兵啦,“地表最帅天团”的闪亮登场✨
等等...最帅天团是指?
Rookie又不正经了一把,当然不是了!!最帅天团当然属于我们可爱帅气的人民解放军啦!
你看那坚毅的眼神,慷锵有力的步伐一次又一次点燃了14亿粉丝的热情。让我看的是?目不转睛,?目不暇接,?目瞪口呆...
当然,除了阅兵场上的小哥哥小姐姐,伟大祖国的武器装备也是琳琅满目。让我印象最深刻的要数火箭军的导弹方队了,各式各样的导弹彰显国力的强大,尤其值得一提的是这次万众瞩目的东风17(DF-17),超高音速导弹!
这可是全球第一款公开亮相的超高音速导弹?,飞行速度可以达到10倍音速以上,末端最高速度最高20倍音速。以这么快的速度飞行从北京到上海6️⃣分钟就可以到达,比复合型迪迦奥特曼的飞行速度还快哈?
DF-17那么酷,那就让我用Python来做一个DF-17发射动画致敬它吧?
这次的任务,我们还是要用到熟悉的海龟turtle?模块。但是和以往的作图不同,这次的核心在于动画里这个的“动”字。
怎么让画面动起来呢?我们都知道,只要让画面更新的够快,大脑就会觉得画面在动了?。所以,我们需要利用turtle快速地画出导弹,然后快速的清空画布,再快速的画出稍有偏移的导弹,再清空,如此往复?
控制时间间隔⏳我们可以使用time模块,简单的导入即可。但是如何让绘画导弹这一过程也变得快速呢?设置绘画速度为0还是不够快,我们需要使用tracer
这个方法来彻底关闭绘图过程。
最后,别忘了用hideturtle
方法来隐藏掉我们可爱的小海龟。
import turtleimport timeturtle.tracer(0) #关闭作图过程turtle.hideturtle() #隐藏海龟
画画?这么简单的事情相信已经难不倒大家了,Rookie我画了一个简易的示意图,相信大家一定能比我画得更加逼真?
只不过,我们要记得把整个导弹的绘制过程放到一个函数里,这样需要反复绘画的时候就不用重写代码了✌
def draw_rocket(y): turtle.pensize(2) turtle.pencolor('black') turtle.penup() turtle.setpos(0,y) turtle.setheading(0) turtle.pendown() # 导弹头部 turtle.goto(-10, y-50) turtle.goto(10, y-50) turtle.goto(0, y) # 导弹身体 turtle.pu() turtle.goto(-10, y-50) turtle.pd() turtle.fillcolor(0,0.5,0) turtle.begin_fill() turtle.goto(-10, y-120) turtle.goto(10, y-120) turtle.goto(10, y-50) turtle.goto(-10, y-50) turtle.end_fill() # 导弹侧翼 turtle.pu() turtle.goto(10, y-80) turtle.pd() turtle.goto(20, y-120) turtle.goto(10, y-120) turtle.pu() turtle.goto(-10, y-80) turtle.pd() turtle.goto(-20, y-120) turtle.goto(-10, y-120) turtle.update()
这次我们试着绘制一个拔地而起,垂直升空的导弹?。不过,无论导弹怎么飞,最终都逃不出画布?的手掌心。在turtle的众多工具里?,window_height/window_width
分别可以获得画布的高度和宽度。我们使用window_height
这个方法获取画布的高度,并用这个数值来帮我们计算:
导弹起飞前所处的初始位置
导弹是否飞出画布边缘,如果是,那就让它重回初始位置,如果不是,就让导弹向上飞一小段距离。
一起来看看代码?理解一下吧~
rocket_height = 130 # 导弹高度rocket_speed = 10 # 导弹升空速度init_pos = -turtle.window_height()/2+rocket_height # 底部导弹的顶点纵坐标y的值rocket_pos = init_pos # 导弹出生在画布底部while True: # 导弹超飞出了画布,让导弹重新回到底部 if rocket_pos>turtle.window_height()/2+rocket_height: rocket_pos = init_pos # 画导弹模型且每一帧导弹模型向上前进移动一定距离 draw_rocket(rocket_pos) rocket_pos += rocket_speed time.sleep(0.05) # 设置帧与帧的间隔时间 turtle.clear() # 清空当前帧的导弹模型
把上面三段代码拼到一起就大功告成了,在Python自带的IDLE里按下F5,倒数3,2,1,发射!!
枚冉冉升起的导弹发射动画已经完成了,这下Rookie我反而更加不满足了?
要是多画几枚导弹,来一个万箭齐发?????,那气势嗖嗖嗖得,绝对有机会挑战奥斯卡最佳镜头了?
怎么样,这个挑战?就交给聪明的你来完成啦。要是完成了,记得把作品私信给我们哦?