Python炫酷烟花特效实现指南

系列文章
| 序号 | 直达链接 |
|---|---|
| Tkinter | |
| 1 | Python李峋同款可写字版跳动的爱心 |
| 2 | Python跳动的双爱心 |
| 3 | Python蓝色跳动的爱心 |
| 4 | Python动漫烟花 |
| 5 | Python粒子烟花 |
| Turtle | |
| 1 | Python满屏飘字 |
| 2 | Python蓝色流星雨 |
| 3 | Python金色流星雨 |
| 4 | Python漂浮爱心 |
| 5 | Python爱心光波① |
| 6 | Python爱心光波② |
| 7 | Python满天繁星 |
| 8 | Python五彩气球 |
| 9 | Python白色飘雪 |
| 10 | Python七彩花朵 |
| 11 | Python 3D星空 |
| 12 | Python大雪纷飞 |
| 13 | Python一闪一闪亮星星 |
| 14 | Python爱心泡泡 |
| 15 | Python爱心射线 |
| 16 | Python圣诞礼物 |
| 17 | Python礼物圣诞树 |
| 18 | Python浪漫星空 |
| 19 | Python飞舞蝙蝠 |
| 20 | Python万圣礼物 |
| 21 | Python蓝色飘雪 |
| Pygame | |
| 1 | Python跨年烟花 |
| 2 | Python炫酷烟花 |
| 3 | Python黑客帝国字母雨 |
| 敬请期待…… | |
写在前面
Python实现炫酷烟花动画的完整代码。
技术需求
- Pygame基础技术
pygame.display.set_mode 创建窗口,pygame.display.set_caption 设置标题,screen.fill 刷新背景。pygame.event.get 捕获用户事件,如退出 (pygame.QUIT) 和按键 (pygame.KEYDOWN)。pygame.time.Clock 设置帧率,保持动画流畅运行。- 随机化与动态效果
random.randint 和 random.uniform 随机生成烟花的颜色、初始位置、目标高度、上升速度和爆炸半径,增加多样性。self.y) 和爆炸半径 (self.explode_radius)。- 数学与几何计算
math.radians 将角度转为弧度,结合 math.cos 和 math.sin 计算爆炸粒子的散射方向。- 面向对象编程
Firework 类封装烟花的属性和行为(如运动、绘制和重置),结构清晰、易扩展。- 循环与动画更新
self.exploded) 控制烟花的不同阶段(上升和爆炸)。- 颜色渐变
完整代码
import pygame
import random
import math
# 初始化 Pygame
pygame.init()
# 定义窗口大小
WIDTH, HEIGHT = 1520, 760 # 设置为全屏分辨率
screen = pygame.display.set_mode((WIDTH, HEIGHT)) # 移除全屏,保留窗口模式
pygame.display.set_caption("炫酷烟花")
# 定义颜色
BLACK = (0, 0, 0)
# 烟花类
class Firework:
def __init__(self):
self.x = random.randint(0, WIDTH)
self.y = HEIGHT + random.randint(50, 250)
self.end_y = random.randint(0, HEIGHT)
self.radius = random.randint(120, 170)
self.explode_radius = 0
self.color = random.choice([
(255, 0, 0), (210, 190, 255), (255, 120, 0),
(255, 0, 150), (255, 240, 100), (10, 255, 255),
(160, 10, 255), (255, 200, 60)
])
self.exploded = False
self.speed = random.uniform(2, 5) # 随机上升速度
def move(self):
if self.y > self.end_y:
self.y -= self.speed
else:
if self.explode_radius >= self.radius:
self.reset()
else:
self.explode_radius += 5
……
代码分析
代码结构概览
该程序通过Pygame实现了一个烟花动画,主要功能包括烟花的上升、爆炸以及散射效果。用户可以通过点击关闭按钮或按下ESC键退出程序。代码结构分为以下几个模块:
Pygame初始化
pygame.init() 初始化Pygame模块,为后续功能做好准备。WIDTH, HEIGHT 定义窗口大小为 1520×760 像素。pygame.display.set_mode() 创建了一个指定大小的窗口。pygame.display.set_caption() 设置窗口标题为“炫酷烟花”。亮点:提供了自定义分辨率,适合多种屏幕。
定义颜色
BLACK,值为RGB (0, 0, 0),表示黑色。优点:黑色背景与彩色烟花形成鲜明对比,突出了视觉效果。
烟花类定义
属性解释:
self.x, self.y:烟花初始位置,x为横坐标,y随机生成高于屏幕范围的起始位置,模拟从地面升起。self.end_y:随机终点高度,决定烟花上升的停止位置。self.radius:烟花爆炸的最大半径,控制爆炸的范围。self.explode_radius:当前爆炸半径,用于动态显示烟花扩散。self.color:随机选择烟花颜色。self.exploded:烟花是否已经爆炸的状态。self.speed:烟花上升速度,范围为2至5像素/帧。功能描述:
绘制逻辑:
angle为间隔,绘制多方向散射的圆点,使用math.cos和math.sin计算爆炸效果。重置烟花:重新初始化烟花,随机生成属性,模拟新烟花的升起。
初始化烟花对象
主循环
功能描述:
pygame.event.get()捕获用户操作:
pygame.QUIT:点击关闭按钮退出程序。pygame.KEYDOWN:按下ESC键退出程序。更新和绘制:
screen.fill(BLACK):刷新背景,清除上一帧的图像。move更新状态,并根据其状态绘制到屏幕。pygame.display.flip():刷新显示,呈现新帧。clock.tick(60):限制帧率为60帧/秒,确保动画流畅。代码优点
- 逻辑清晰:烟花类封装了运动、绘制和重置逻辑,代码模块化,易于扩展。
- 动态效果真实:使用
math.cos和math.sin模拟爆炸散射角度,呈现立体感。通过逐渐增大的爆炸半径和多层颜色变化,增强了视觉效果。 - 随机性增强多样性:位置、颜色、速度、爆炸范围随机化,使每次烟花展示独特且富有变化。
- 用户体验友好:支持
ESC键退出,方便用户控制。
总结
这段代码通过简单的逻辑和Pygame的强大功能,成功实现了一个炫目的烟花动画效果。其设计合理、扩展性强,是学习Pygame动画开发的优秀案例。
写在后面
我是一只有趣的兔子,感谢你的喜欢!
作者:Want595