使用python实现烟花绽放效果的案例

  介绍

这篇文章将为大家详细讲解有关使用python实现烟花绽放效果的案例,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

<强>一。编译环境

Pycharm

<强>二。模块

1. tkinter:这个小项目的主角,是一个python图形模块。且Python3已经自带了该模块,不用另外安装。它有点像java中的秋千图形模块(由众多组件集成,组件通过创建实例添加,组件通过坐标定位在窗口上).

2。公益诉讼:Python影像库,是Python平台的图像处理标准模块。在Python3也是自带的,在这个项目中用于背景图片的导入。

3.:相信这个模块大家都不会陌生,导入它用来控制烟花的绽放,坠落及消失时间。

4.随机:随机数模块,用于生成烟花随机坐标点,随机绽放速度,随机消失时间。

5.数学:这个模块大家应该也很熟悉了,导入它的目的是使烟花绽放的粒子以一定角度散开。

<强>三。效果

使用python实现烟花绽放效果的案例

项目最终实现的效果就跟上面一样了。

<强>四。代码

以下是我学习(副本)了那位大神的代码,再添加了一些浅显的注解。

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实现烟花绽放效果的案例