介绍
这篇文章将为大家详细讲解有关使用python实现烟花绽放效果的案例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
<强>一。编译环境强>
Pycharm
引用><强>二。模块强>
1. tkinter:这个小项目的主角,是一个python图形模块。且Python3已经自带了该模块,不用另外安装。它有点像java中的秋千图形模块(由众多组件集成,组件通过创建实例添加,组件通过坐标定位在窗口上).
2。公益诉讼:Python影像库,是Python平台的图像处理标准模块。在Python3也是自带的,在这个项目中用于背景图片的导入。
3.:相信这个模块大家都不会陌生,导入它用来控制烟花的绽放,坠落及消失时间。
4.随机:随机数模块,用于生成烟花随机坐标点,随机绽放速度,随机消失时间。
5.数学:这个模块大家应该也很熟悉了,导入它的目的是使烟花绽放的粒子以一定角度散开。
<强>三。效果强>
项目最终实现的效果就跟上面一样了。
<强>四。代码强>
以下是我学习(副本)了那位大神的代码,再添加了一些浅显的注解。
import tkinter as tk 得到PIL import 形象,ImageTk 得到time import 时间,睡眠 得到random import 选择,制服,randint 得到math import 罪恶,因为,弧度 #重力变量 重力=0.5 # listof 颜色,还要choose randomly 或是use as 队列(FIFO 颜色=[& # 39;红色# 39;& # 39;蓝# 39;,& # 39;黄色# 39;,& # 39;白色# 39;,& # 39;绿色# 39;,& # 39;橙色# 39;,& # 39;紫色# 39;,& # 39;海绿色# 39;,& # 39;靛蓝# 39;,& # 39;cornflowerblue& # 39;】 & # 39;& # 39;& # 39; create a  class for 粒子粒子 particles 断开连接;emitted almost  randomly 提醒,天空, forming 周围(组成一个圈),of 圆(a 明星)before falling 以及getting removed 得到画布 属性(属性): id:每个特定烟花的标识符 x, y:烟花的绽放坐标 vx, v:烟花的绽放速度 总:一颗烟花里的星星总数 年龄:一颗星星会在画布上停留多久 颜色:自我移植 简历:画布 寿命:星星在画布上停留的最后时间 & # 39;& # 39;& # 39; class 部分:#为每一个烟花绽放出来的粒子单独构建一个类的对象 ,def __init__(自我,简历,idx,总、explosion_speed x=0, y=0, vx=0。, v=0。,大?2,颜色=& # 39;红色# 39;,寿命=2,* * kwargs): self.id才能=idx #每个烟花的特定标识符 self.x=x #烟才能花的绽放x轴 self.y=y #烟才能花的绽放x轴 self.initial_speed才能=explosion_speed #初速度 self.vx才能=vx #外放x轴速度 self.vy才能=v #外放y轴速度 self.total=总#绽才能放的粒子数 self.age才能=0 #已停留时间 self.color才能=颜色#颜色 self.cv=简历才能#画布 self.cid才能=self.cv.create_oval (x-size y-size x +大小、y +大小,填补=self.color) # create_oval()创建一个椭圆,参数为左x上,左上y,右下x,右下y,填满的颜色,该函数返回一个id self.lifespan才能=寿命#应该停留时间 ,def 更新(自我,dt): #更新数据,已停留时间增加 self.age才能+=dt #才能粒子膨胀 if 才能;self.alive(),以及self.expand(): #如果停留时间(2 s)足够,,膨胀时间(1.2秒)足够 ,,move_x=cos(弧度(self.id * 360/self.total)) * self.initial_speed #粒子的x轴继续膨胀 ,,move_y=罪(弧度(self.id * 360/self.total)) * self.initial_speed #粒子的y轴继续膨胀 ,,self.cv.move (self.cid, move_x,, move_y) #根据id把画布上的粒子移动x和y个距离 ,,self.vx=move_x/(浮动(dt) * 1000) #才能以自由落体坠落 elif 才能self.alive(): #如果只是停留时间足够,说明膨胀到最大了,应该准备下坠 ,,move_x=cos(弧度(self.id * 360/self.total)) # x轴继续膨胀 ,,self.cv.move (self.cid self.vx + move_x self.vy +重力* dt) #而y轴按照重力因素做落体运动,但实际上这个重力是v而不是一个 引力,才能self.vy +=* dt #更新一下y轴 elif 才能self.cid is  not 没有:#如果粒子的生命周期已过,就将其移除 ,,cv.delete (self.cid) #删除该粒子对象 ,,self.cid=没有 ,#定义膨胀效果的时间帧 ,def 扩大(自我): return 才能;self.age<=1.2 #膨胀时间小于1.2 s ,#检查粒子是否仍在生命周期内 活着,def (自我):#已停留时间是不是比应该停留时间短 return 才能;self.age<=self.lifespan & # 39;& # 39;& # 39; 烟花模拟回路: 递归调用来在画布上重复发出新的烟火 通过每个“部件”对象内部的更新协议,每次调用时都要在画布上创建并绘制列表(星列表,每个星列表成员都是粒子列表)来重复地在画布上发出新的焰的火 & # 39;& # 39;& # 39; #生成新的一轮爆炸 def 模拟(简历): ,t=() #时间()函数返回自1970年后经过的浮点秒数,精确到小数点后6位 ,explode_points=[] #爆炸点列表——烟花列表 ,wait_time=randint(10100) #随机生成一个int n, 10 & lt;=n使用python实现烟花绽放效果的案例