最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python粒子煙花動態(tài)效果實現(xiàn)

 更新時間:2023年01月03日 11:13:51   作者:輕松學(xué)Python  
這篇文章主要介紹了Python實現(xiàn)粒子煙花動態(tài)效果,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧

跨年倒計時還有18天?我已經(jīng)開始整煙花了,雖然不是很好看吧,但是也能將就看看 ??

這個的背景圖,音樂,還有文字都是可以自己修改的哦

效果展示

依次導(dǎo)入本次需要使用到的模塊

import random
import pygame as py
import tkinter as tk
from time import time, sleep
from tkinter import filedialog
from PIL import Image, ImageTk
from math import sin, cos, radians
from random import choice, uniform, randint

實現(xiàn)代碼

生成隨機(jī)顏色

def randomcolor():
    #生成隨機(jī)顏色
    colArr = ['1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']
    color = ""
    for i in range(6):
        color += colArr[random.randint(0,14)]
    return "#"+color
GRAVITY = 0.06
#重力變量
colors = ['red', 'blue', 'yellow', 'white', 'green', 'orange', 'purple', 'seagreen','indigo', 'cornflowerblue', 'pink']
#顏色列表

屬性

Generic class for particles
particles are emitted almost randomly on the sky, forming a round of circle (a star) before falling and getting removed
from canvas
Attributes(屬性):
    - id: 粒子的id
    - x, y: 粒子的坐標(biāo)
    - vx, vy: 粒子在對應(yīng)坐標(biāo)的變化速度
    - total:一顆煙花里的粒子總數(shù)
    - age: 粒子在畫布上停留的時間
    - color: 自我移植
    - cv: 畫布
    - lifespan: 粒子在畫布上停留的時間

粒子運(yùn)動的速度

這個里面的新年快樂是可以自己更改的哦

class part:
#為每一個煙花綻放出來的粒子單獨構(gòu)建一個類的對象 ,每個粒子都會有一些重要的屬性,決定它的外觀(大小、顏色)、移動速度等
    def __init__(self, cv, idx, total, explosion_speed, x=0., y=0., vx = 0., vy = 0., size=3., color = 'red', lifespan = 2, **kwargs):
        self.id = idx
        #每個煙花的特定標(biāo)識符
        self.x = x
        #煙花綻放x軸
        self.y = y
        #煙花綻放y軸
        self.initial_speed = explosion_speed
        #粒子初始速度
        self.vx = vx
        #粒子運(yùn)動x軸速度
        self.vy = vy
        #粒子運(yùn)動y軸速度
        self.total = total
        #綻放粒子數(shù)
        self.age = 0
        #粒子已停留時間
        self.color = color
        #粒子顏色
        self.cv = cv
        #畫布
        self.cid = self.cv.create_oval(x - size, y - size, x + size,y + size, fill=self.color, outline='white',width=0.01)
        #指定一個限定矩形(Tkinter 會自動在這個矩形內(nèi)繪制一個橢圓)
        self.lifespan = lifespan
        #粒子在畫布上停留的時間

xy軸移動位移

如果粒子僅存活不擴(kuò)張(只是停留時間足夠,說明膨脹到最大了),則自由墜落

elif self.alive():
    columnFont = ('華文行楷',14)
    self.cv.create_text(250, 100, text='新',tag="write_tag", fill=choice(colors),font = columnFont) #字體
    self.cv.create_text(300, 100,  text='年',tag="write_tag", fill=choice(colors),font = columnFont)
    self.cv.create_text(350, 100, text='快',tag="write_tag", fill=choice(colors),font = columnFont)
    self.cv.create_text(400, 100,  text='樂',tag="write_tag", fill=choice(colors),font = columnFont)
    #刪除文字標(biāo)簽
    move_x = cos(radians(self.id*360/self.total))
    #x軸的移動位移
    # we technically don't need to update x, y because move will do the job
    self.cv.move(self.cid, self.vx + move_x, self.vy+GRAVITY*dt)
    self.vy += GRAVITY*dt
    #更新y軸

膨脹效果時間幀

判斷膨脹時間是否小于1.2秒

def expand (self):
    #定義膨脹效果時間幀
    return self.age <= 1.2

判斷粒子是否仍在生命周期內(nèi)

判斷已停留時間是否小于應(yīng)該停留時間

def alive(self):
    #判斷粒子是否仍在生命周期內(nèi)
    return self.age <= self.lifespan

剩下代碼

不想一步步寫出來咯,有點麻煩哈哈

代碼后面都有注釋哈

def simulate(cv):
    t = time()
    #返回自1970年后經(jīng)過的浮點秒數(shù),精確到小數(shù)點后7位
    explode_points = []
    #爆炸點列表,煙花列表
    wait_time = randint(10,100)
    #等待時間為10到100之間整數(shù)
    numb_explode = randint(8,20)
    #爆炸煙花個數(shù)時6到10之間的隨機(jī)整數(shù)
    # create list of list of all particles in all simultaneous explosion
    for point in range(numb_explode):
        #為所有模擬煙花綻放的全部粒子創(chuàng)建一列列表
        if point<=4:
            objects = []
            #每個點的爆炸粒子列表粒子列表
            x_cordi = 250 + point*50
            #每個爆炸點的x軸
            y_cordi = 100
            #每個爆炸點的y軸
            speed = uniform (0.5, 2.5)
            #每個爆炸點的速度
            size = uniform (0.5,3)
            #每個爆炸點的大小
            color = choice(colors)
            #每個爆炸點的顏色
            explosion_speed = uniform(0.6, 3)
            #爆炸的綻放速度
            total_particles = randint(10,60)
            #煙花的總粒子數(shù)
            for i in range(1,total_particles):
            #同一個煙花爆炸出來的粒子大小、速度、坐標(biāo)都是相同的
                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))
                #把上述參數(shù)代入part函數(shù),但是每個粒子的生存時間是自己獨立的
                objects.append(r)
                #把r添加進(jìn)粒子列表
            explode_points.append(objects)
            #把粒子列表添加進(jìn)煙花列表
        else: 
            objects = []
            #每個點的爆炸粒子列表粒子列表
            x_cordi = randint(50,550)
            #每個爆炸點的x軸
            y_cordi = randint(50, 250)
            #每個爆炸點的y軸
            speed = uniform (0.5, 2.5)
            #每個爆炸點的速度
            size = uniform (0.5,3)
            #每個爆炸點的大小
            color = choice(colors)
            #每個爆炸點的顏色
            explosion_speed = uniform(0.3, 2)
            #爆炸的綻放速度
            total_particles = randint(10,50)
            #煙花的總粒子數(shù)
            for i in range(1,total_particles):
            #同一個煙花爆炸出來的粒子大小、速度、坐標(biāo)都是相同的
                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))
                #把上述參數(shù)代入part函數(shù),但是每個粒子的生存時間是自己獨立的
                objects.append(r)
                #把r添加進(jìn)粒子列表
            explode_points.append(objects)
            #把粒子列表添加進(jìn)煙花列表
    total_time = .0
    #初始化總時間
    # keeps undate within a timeframe of 1.8 second 
    while total_time < 2:
    #當(dāng)總時間小于1.8秒時運(yùn)行該循環(huán)
        sleep(0.03)
        #讓畫面暫停0.01秒
        tnew = time()
        #刷新時間
        t, dt = tnew, tnew - t
        #時間等于新時間,和上次時間間隔為tnew-t
        for point in explode_points:
        #遍歷煙花列表
            for item in point:
            #遍歷煙花里的粒子列表
                item.update(dt)
                #粒子更新時間
        cv.update()
        #刷新畫布
        total_time += dt
        #為while循環(huán)增加時間
    root.after(wait_time, simulate, cv)
    #將組件置于其他組件之后,放在最頂層,覆蓋下面的,遞歸調(diào)用自己,形成新一輪的爆炸
def close(*ignore):
    #打開模擬循環(huán)并關(guān)閉窗口
    """Stops simulation loop and closes the window."""
    global root
    root.quit()
if __name__ == '__main__': 
    root = tk.Tk() 
    root.title('新年快樂~~')  # 設(shè)置窗體的標(biāo)題欄
    cv = tk.Canvas(root, height=600, width=600)
    #繪制一個高600,寬600的畫布 
    bgpath = filedialog.askopenfilename(title='請選擇背景圖片')
    #選擇背景圖片
    image = Image.open(bgpath)
    #打開背景圖片
    image = image.resize((600,600), Image.ANTIALIAS)
    #把背景圖片調(diào)整成窗口大小
    photo = ImageTk.PhotoImage(image) 
    cv.create_image(0, 0, image=photo, anchor='nw')
    #在畫布上繪制加載的背景圖片 
    bgmusic = filedialog.askopenfilename(title='請選擇背景音樂')
    py.mixer.init()
    # 初始化
    py.mixer.music.load(bgmusic)
    # 文件加載
    py.mixer.music.play(-1, 0, fade_ms=50)
    # 播放  第一個是播放值 -1代表循環(huán)播放, 第二個參數(shù)代表開始播放的時間
    py.mixer.music.pause() 
    #暫停
    py.mixer.music.unpause()
    #取消暫停
    cv.pack()
    #把cv添加進(jìn)去
    root.protocol("WM_DELETE_WINDOW", close)
    root.after(200, simulate, cv)
    #在0.1秒后再調(diào)用stimulate函數(shù),生成一輪煙花綻放效果
    root.mainloop()
    #執(zhí)行root,生成窗口

到此這篇關(guān)于Python粒子煙花動態(tài)效果實現(xiàn)的文章就介紹到這了,更多相關(guān)Python粒子煙花內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python的set處理二維數(shù)組轉(zhuǎn)一維數(shù)組的方法示例

    python的set處理二維數(shù)組轉(zhuǎn)一維數(shù)組的方法示例

    這篇文章主要介紹了python的set處理二維數(shù)組轉(zhuǎn)一維數(shù)組的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • 詳解python使用turtle庫來畫一朵花

    詳解python使用turtle庫來畫一朵花

    這篇文章主要介紹了python使用turtle庫來畫一朵花,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Python3.7 + Yolo3實現(xiàn)識別語音播報功能

    Python3.7 + Yolo3實現(xiàn)識別語音播報功能

    這篇文章主要介紹了Python3.7 + Yolo3識別語音播報功能,開始之前我們先得解析出來Yolo3的代碼,從而獲取到被識別出來的物體標(biāo)簽,具體詳細(xì)過程跟隨小編一起看看吧
    2021-12-12
  • Python代碼調(diào)試的方法集錦

    Python代碼調(diào)試的方法集錦

    程序能一次寫完并正常運(yùn)行的概率很小,基本不超過1%,總會有各種各樣的bug需要修正,有的bug很簡單,看看錯誤信息就知道,有的bug很復(fù)雜,因此,需要一整套調(diào)試程序的手段來修復(fù)bug,所以本文給大家介紹了Python代碼調(diào)試的方法集錦,需要的朋友可以參考下
    2025-03-03
  • python列表推導(dǎo)式 經(jīng)典代碼

    python列表推導(dǎo)式 經(jīng)典代碼

    這篇文章主要介紹了python列表推導(dǎo)式,文章內(nèi)容附有經(jīng)典的詳細(xì)代碼,感興趣的小伙按可以參考下面文章具體內(nèi)容
    2021-10-10
  • python 發(fā)送get請求接口詳解

    python 發(fā)送get請求接口詳解

    這篇文章主要介紹了python 發(fā)送get請求接口詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • python中__set_name__的具體使用

    python中__set_name__的具體使用

    在Python中,我們可以通過__set_name__方法來實現(xiàn)一些特殊的操作,本文主要介紹如何在Python中實現(xiàn)__set_name__方法,并且給出一些實際應(yīng)用的示例,感興趣的可以了解一下
    2024-01-01
  • Python 存儲字符串時節(jié)省空間的方法

    Python 存儲字符串時節(jié)省空間的方法

    這篇文章主要介紹了Python 存儲字符串時節(jié)省空間的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • python-opencv實現(xiàn)視頻指定幀數(shù)間隔圖像的保存功能

    python-opencv實現(xiàn)視頻指定幀數(shù)間隔圖像的保存功能

    這篇文章主要介紹了python-opencv實現(xiàn)視頻指定幀數(shù)間隔圖像的保存的方法,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Python常見數(shù)據(jù)結(jié)構(gòu)之棧與隊列用法示例

    Python常見數(shù)據(jù)結(jié)構(gòu)之棧與隊列用法示例

    這篇文章主要介紹了Python常見數(shù)據(jù)結(jié)構(gòu)之棧與隊列用法,結(jié)合實例形式簡單介紹了數(shù)據(jù)結(jié)構(gòu)中棧與隊列的概念、功能及簡單使用技巧,需要的朋友可以參考下
    2019-01-01

最新評論

广昌县| 新安县| 全南县| 万全县| 乐都县| 名山县| 五寨县| 嫩江县| 隆安县| 敦化市| 万源市| 来宾市| 新闻| 绍兴县| 洛阳市| 西林县| 香河县| 宿松县| 廊坊市| 个旧市| 皮山县| 桑植县| 苏尼特右旗| 栖霞市| 龙胜| 安岳县| 故城县| 桓仁| 雷州市| 舞阳县| 余庆县| 观塘区| 华池县| 滁州市| 道孚县| 囊谦县| 阿克苏市| 长汀县| 安义县| 铜鼓县| 鹤峰县|