烟花

系列文章

序号 直达链接
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实现炫酷烟花动画的完整代码。

技术需求

  1. Pygame基础技术
  • 窗口管理:通过 pygame.display.set_mode 创建窗口,pygame.display.set_caption 设置标题,screen.fill 刷新背景。
  • 事件处理:使用 pygame.event.get 捕获用户事件,如退出 (pygame.QUIT) 和按键 (pygame.KEYDOWN)。
  • 帧率控制:通过 pygame.time.Clock 设置帧率,保持动画流畅运行。
    1. 随机化与动态效果
  • 随机属性:通过 random.randintrandom.uniform 随机生成烟花的颜色、初始位置、目标高度、上升速度和爆炸半径,增加多样性。
  • 动态动画:烟花上升和爆炸效果的实现通过实时更新位置 (self.y) 和爆炸半径 (self.explode_radius)。
    1. 数学与几何计算
  • 角度与方向计算:使用 math.radians 将角度转为弧度,结合 math.cosmath.sin 计算爆炸粒子的散射方向。
  • 多层散射:根据角度和粒子大小实现分层散射效果,增强立体感。
    1. 面向对象编程
  • 类封装:通过 Firework 类封装烟花的属性和行为(如运动、绘制和重置),结构清晰、易扩展。
    1. 循环与动画更新
  • 主循环:程序运行期间持续处理事件、更新状态和绘制内容。
  • 状态控制:利用布尔变量 (self.exploded) 控制烟花的不同阶段(上升和爆炸)。
    1. 颜色渐变
  • 动态调整粒子颜色,使烟花爆炸具有亮度渐变的效果,提升视觉体验。
  • 完整代码

    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库,创建了一个模拟烟花的动画程序,以下是对代码的详细分析。


    1. 代码结构概览

    该程序通过Pygame实现了以下功能:

  • 在窗口中显示上升和爆炸的烟花动画。
  • 烟花上升到一定高度后爆炸,并模拟烟花散射的效果。
  • 提供了用户控制退出程序的功能。
  • 主要包括以下模块:

    1. 窗口初始化:设置窗口大小、标题和背景颜色。
    2. 烟花类定义:描述烟花的属性和行为,包括运动逻辑、绘制和重置。
    3. 主循环:控制程序运行,负责事件处理、动画更新和绘制。

    2. 代码分析

    (1)Pygame初始化

  • pygame.init() 初始化Pygame模块,为后续功能做好准备。
  • WIDTH, HEIGHT 定义窗口大小为 1520×760 像素。
  • pygame.display.set_mode() 创建了一个指定大小的窗口。
  • pygame.display.set_caption() 设置窗口标题为“炫酷烟花”。
  • 亮点

  • 提供了自定义分辨率,适合多种屏幕。
  • (2)定义颜色

  • 定义了背景色BLACK,值为RGB (0, 0, 0),表示黑色。
  • 优点

  • 黑色背景与彩色烟花形成鲜明对比,突出了视觉效果。
  • (3)烟花类定义

    属性解释

  • self.x, self.y:烟花初始位置,x为横坐标,y随机生成高于屏幕范围的起始位置,模拟从地面升起。
  • self.end_y:随机终点高度,决定烟花上升的停止位置。
  • self.radius:烟花爆炸的最大半径,控制爆炸的范围。
  • self.explode_radius:当前爆炸半径,用于动态显示烟花扩散。
  • self.color:随机选择烟花颜色。
  • self.exploded:烟花是否已经爆炸的状态。
  • self.speed:烟花上升速度,范围为2至5像素/帧。
  • 功能描述

  • 如果烟花未达到目标高度,则以指定速度向上移动。
  • 如果达到目标高度,则触发爆炸效果,爆炸半径逐渐增大,直到达到预设最大值。
  • 绘制逻辑

  • 若未爆炸:绘制小圆点表示上升烟花。
  • 若已爆炸:以angle为间隔,绘制多方向散射的圆点,使用math.cosmath.sin计算爆炸效果。
  • 重置烟花

  • 重新初始化烟花,随机生成属性,模拟新烟花的升起。

  • (4)初始化烟花对象

  • 创建50个烟花对象并存储在列表中,确保画面始终有多个烟花在运动和爆炸。

  • (5)主循环

    功能描述

  • 使用pygame.event.get()捕获用户操作:
  • pygame.QUIT:点击关闭按钮退出程序。
  • pygame.KEYDOWN:按下ESC键退出程序。
  • 更新和绘制

  • screen.fill(BLACK):刷新背景,清除上一帧的图像。

  • 遍历每个烟花对象,调用move更新状态,并根据其状态绘制到屏幕。

  • pygame.display.flip():刷新显示,呈现新帧。

  • clock.tick(60):限制帧率为60帧/秒,确保动画流畅。


  • 3. 代码优点

    1. 逻辑清晰

    2. 烟花类封装了运动、绘制和重置逻辑,代码模块化,易于扩展。
    3. 动态效果真实

    4. 使用math.cosmath.sin模拟爆炸散射角度,呈现立体感。
    5. 通过逐渐增大的爆炸半径和多层颜色变化,增强了视觉效果。
    6. 随机性增强多样性

    7. 位置、颜色、速度、爆炸范围随机化,使每次烟花展示独特且富有变化。
    8. 用户体验友好

    9. 支持ESC键退出,方便用户控制。

    4. 总结

    这段代码通过简单的逻辑和Pygame的强大功能,成功实现了一个炫目的烟花动画效果。其设计合理、扩展性强,是学习Pygame动画开发的优秀案例。

    写在后面

    我是一只有趣的兔子,感谢你的喜欢!

    作者:Want595

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python炫酷烟花

    发表回复