弹指间,2023已经到来,新的一年,祝大家新年快乐,阖家幸福呀~~~
好吧,进入正题,2023的到来,肯定少不了烟花吧(外面不让放炮,那咱们就用python放炮【DOGE】)
首先,需要的外置库:pygame,pymunk
导入
import pygame
from pygame.locals import *
import pymunk
from pymunk import pygame_util
import sys
import random as rd
import time
import math
然后写一个主程序类,对pygame进行初始化,设置屏幕宽高,设置标题,创建pymunk空间,然后设置空间的重力为(0,300),然后设置collision_persistence参数为0,表示没有碰撞,毕竟俩烟花也不会撞一起......然后设置烟花半径(可以自行修改),创建两个列表,用于存放烟花爆炸形成的火球和发射到天空中还没爆炸的烟花,创建一个colors列表,存放烟花的颜色
class Firework:
def __init__(self):
pygame.init()
self.W,self.H=800,1000
self.screen=pygame.display.set_mode((self.W,self.H))
self.draw_options=pygame_util.DrawOptions(self.screen)
pygame.display.set_caption("2023元旦烟花")
self.space=pymunk.Space()
self.space.gravity=(0,300)
self.space.collision_persistence=0
self.fireball_radius=2
self.fire_radius=2
self.fireballs=[]
self.colors=[
(255,0,0),(255,127,80),(255,140,0),(255,160,122),(240,128,128),(255,99,71),(255,69,0),
(255,105,180),(255,20,147),(208,32,144),(176,48,96),(153,50,204),(255,48,48),
(238,44,44),(205,38,38),(255,255,0),(255,215,0),(255,185,15),(238,201,0),
(34,139,34),(46,139,87),(60,179,113),(0,255,127)
]
self.fires=[]
接下来,进行事件监听,按下鼠标就可以创建火球
def listen(self):
for event in pygame.event.get():
if event.type==QUIT:
sys.exit()
if event.type==MOUSEBUTTONDOWN:
self.create_firework(x=pygame.mouse.get_pos()[0])
然后写个创建烟花的方法,首先要有个body,设置body_type为DYNAMIC,因为烟花是动态的。然后设置body的位置,x坐标为传参的x坐标,y坐标为屏幕最底部,接下来创建一个shape,形状为circle,body对应的fireball_body传进去就好了,然后设置radius(半径),设置shape的弹性(这个不设置也可以,没多大影响)&#x