发个红包,新年快乐!
你好, 今天是大年初一, 林骥给你拜年了 !
发个 28 元 的红包
参与方式:点击下面这条视频,点赞 并评论新年快乐,关注即可参与抽奖。
我很喜欢这个视频背景音乐的 歌词,正好表达了我此刻想说的话:
想对你说声新年快乐
希望你珍惜每个拥有
人生的旅途
越简单越快乐
学会做自己更加洒脱
想对你唱首新年快乐
希望你过想要的生活
让未来不虚度
愿回忆不苦涩
真心地祝福你现在
比从前更快乐
另外,视频中烟花绽放的效果,我是用 Python 来实现的,完整代码如下:
# 导入库
import tkinter as tk
from PIL import Image, ImageTk
from time import time, sleep
from random import choice, uniform, randint
from math import sin, cos, radians
#重力变量
GRAVITY = 0.6
# 颜色列表
colors = [ ‘red’ , ‘blue’ , ‘yellow’ , ‘white’ , ‘green’ , ‘orange’ , ‘purple’ ]
# 为每一个烟花绽放出来的粒子单独构建一个类的对象
class part :
def __init__ (self, cv, idx, total, explosion_speed, x= 0. , y= 0. , vx= 0. , vy= 0. , size= 2. , color= ‘red’ , lifespan= 2 , **kwargs) :
# 每个烟花的特定标识符
self.id = idx
# 烟花的绽放x轴
self.x = x
# 烟花的绽放y轴
self.y = y
# 初速度
self.initial_speed = explosion_speed
# x轴速度
self.vx = vx
# y轴速度
self.vy = vy
# 绽放的粒子数
self.total = total
# 已停留时间
self.age = 0
# 颜色
self.color = color
# 画布
self.cv = cv
# create_oval()创建一个椭圆,参数为左上x,左上y,右下x,右下y,填满的颜色,该函数返回一个id
self.cid = self.cv.create_oval(x-size, y-size, x+size, y+size, fill=self.color)
# 应该停留时间
self.lifespan = lifespan
# 更新数据,已停留时间增加
def update (self,dt) :
self.age += dt
# 粒子膨胀,如果停留时间(2s)足够&&膨胀时间(1.2s)足够
if self.alive() and self.expand():
# 粒子的x轴继续膨胀
move_x = cos(radians(self.id* 360 /self.total))*self.initial_speed
# 粒子的y轴继续膨胀
move_y = sin(radians(self.id* 360 /self.total))*self.initial_speed
self.cv.move(self.cid, move_x, move_y) #根据id把画布上的粒子移动x和y个距离
self.vx = move_x/(float(dt)* 1000 )
# 以自由落体坠落,如果只是停留时间足够,说明膨胀到最大了,应该准备下坠
elif self.alive():
# x轴继续膨胀
move_x = cos(radians(self.id* 360 /self.total))
# y轴按照重力因素做落体运动
self.cv.move(self.cid,self.vx+move_x,self.vy+GRAVITY*dt)
# 更新一下y轴
self.vy += GRAVITY*dt
# 如果粒子的生命周期已过,就将其移除
elif self.cid is not None :
# 删除该粒子对象
cv.delete(self.cid)
self.cid= None
# 定义膨胀效果的时间帧
def expand(self) :
# 膨胀时间小于1.2s
return self.age <= 1.2
# 检查粒子是否仍在生命周期内,已停留时间是不是比应该停留时间短
def alive (self) :
return self.age<=self.lifespan
# 烟花模拟,通过递归调用来在画布上重复发出新的烟火
def simulate (cv) :
# 函数返回自1970年后经过的浮点秒数,精确到小数点后6位
t = time()
# 爆炸点列表–烟花列表
explode_points = []
# 随机生成一个int n, 10<=n<=100
wait_time = randint( 10 , 100 )
# 爆炸的个数是6~10
numb_explode = randint( 6 , 10 )
# 为所有模拟烟花绽放的全部例子创建一列列表,遍历爆炸的个数
for point in range(numb_explode):
# 这是每个点的爆炸粒子列表
objects = []
# 每个点的爆炸x轴
x_cordi = randint( 50 , 550 )
# 爆炸y轴
y_cordi = randint( 50 , 150 )
# 随机生成一个float speed,0.5<=speed<1.5
speed = uniform( 0.5 , 1.5 )
# 随机生成一个float size,0.5<=size<3
size = uniform( 0.5 , 3 )
# choice()是python内置函数,随机返回元组,列表,或字符串的一个成员
color = choice(colors)
# 爆炸的绽放速度也要随机出来
explosion_speed = uniform( 0.2 , 1 )
# 爆炸出来的粒子数半径也随机
total_particles = randint( 10 , 50 )
# 同一个烟花爆炸出来的粒子的大小,速度,坐标都是相同的
for i in range( 1 ,total_particles):
# 把上述参数带入,但他们每个粒子的生存时间是自己独立的
r = part(cv, idx=i, total=total_particles, explosion_speed=explosion_speed, x=x_cordi, y=y_cordi,
vx=speed, vy=speed, color=color, size=size, lifespan=uniform( 0.6 , 1.75 ))
# 添加进粒子列表里
objects.append(r)
# 把该粒子列表添加进烟花列表里
explode_points.append(objects)
#先把时间置0
total_time = .0
# 在1.8秒时间帧内保持更新
while total_time < 1.8 :
# 让画面暂停0.01s
sleep( 0.01 )
# 刷新时间
tnew=time()
# 时间等于新时间,与上次时间间隔为tnew-t
t,dt = tnew,tnew-t
# 遍历烟花列表
for point in explode_points:
# 遍历烟花里的粒子列表
for item in point:
# 更新时间
item.update(dt)
# 刷新页面
cv.update()
# 为上面的while循环增加时间
total_time += dt
# 将组件置于其他组件之后,就是放在最顶层,覆盖下面的,这里递归第哦啊用了自己,形成新的一轮爆炸
root.after(wait_time, simulate, cv)
def close (*ignore) :
# 打开模拟循环并关闭窗口
global root
root.quit()
root = tk.Tk()
# 绘制一个画布
cv = tk.Canvas(root, height= 600 , width= 700 )
# 打开一个背景图片
image = Image.open( “shanghai.jpeg” )
photo = ImageTk.PhotoImage(image)
# 在画板上绘制一张图片
cv.create_image( 0 , 0 , image=photo, anchor= ‘nw’ )
# 把cv添加进去
cv.pack()
root.protocol( “WM_DELETE_WINDOW” , close)
# 在0.1s后才开始调用stimulate(),生成一轮烟花绽放效果
root.after( 100 , simulate, cv)
# 执行root,生成窗口
root.mainloop()
原始代码来源于网络,我调整了其中的一些格式、注释和参数,你可以替换成自己喜欢的图片背景,也可以调整烟花绽放的颜色和效果等参数。
最后的话
无论学习什么,我喜欢多想一想,还能应用在什么地方。
把 Python 用于新年快乐的祝福,让我觉得这个新年变得更加有趣。
在平凡的生活中,用积极乐观的心态去面对,努力把当下的事情做好,我认为这样的生活会 更有意义 。
☟☟☟☟☟☟
关注林骥的公众号,更多干货早知道。
欢迎加入我的 免费 知识星球,点击左下角的 阅读原文 即可加入。
如果你觉得文章对你有帮助或启发,麻烦你动动手指支持鼓励一下, 分享、收藏、点赞、 在 看, 谢谢!
☟分享 ☟收藏 ❤ ☟ 点赞 ☟ 在看