3

发个红包,新年快乐!

 3 years ago
source link: https://mp.weixin.qq.com/s?__biz=MzA4ODE2OTIxMw%3D%3D&%3Bmid=2653477331&%3Bidx=1&%3Bsn=24701d97520c422aa1059553f1135202
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

你好, 今天是大年初一, 林骥给你拜年了

发个 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 用于新年快乐的祝福,让我觉得这个新年变得更加有趣。

在平凡的生活中,用积极乐观的心态去面对,努力把当下的事情做好,我认为这样的生活会 更有意义

☟☟☟☟☟☟

关注林骥的公众号,更多干货早知道。

E3quiyU.png!mobile

欢迎加入我的 免费 知识星球,点击左下角的 阅读原文 即可加入。

如果你觉得文章对你有帮助或启发,麻烦你动动手指支持鼓励一下, 分享、收藏、点赞、看, 谢谢!

☟分享  ☟收藏      点赞 ☟ 在看


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK