Python 实现 3D 爱心粒子跳动特效:代码解析与注意要点
以下是缩进修正和错误检查后的代码,同时会给出相关 ```python import pygame import numpy as np import math import random # 初始化pygame pygame.init() # 获取屏幕尺寸并设置全屏 info = pygame.display.Info() WIDTH, HEIGHT = info.current_w, info.current_h screen = pygame.display.set_mode((WIDTH, HEIGHT), pygame.FULLSCREEN) pygame.display.set_caption("3D爱心粒子跳动") # 颜色定义 RED = (255, 50, 50) PINK = (255, 100, 200) WHITE = (255, 255, 255) # 粒子类 class Particle: def __init__(self): # 3D爱心参数方程 t = random.uniform(0, 2 * math.pi) size = random.uniform(2, 5) # 爱心形状参数 # 修正此处的语法错误,添加 运算符 x = 16 * (math.sin(t) 3) y = 13 * math.cos(t) - 5 * math.cos(2*t) - 2 * math.cos(3*t) - math.cos(4*t) z = random.uniform(-5, 5) # 初始位置(居中) self.pos = np.array([x * 10 + WIDTH // 2, -y * 10 + HEIGHT // 2, z]) self.vel = np.array([0, 0, 0]) self.acc = np.array([0, 0, 0]) self.size = size self.color = random.choice([RED, PINK, WHITE]) self.life = 255 def update(self): # 添加随机运动 self.acc = np.array([random.uniform(-0.2, 0.2), random.uniform(-0.2, 0.2), random.uniform(-0.1, 0.1)]) # 物理模拟 self.vel += self.acc self.pos += self.vel # 边界检查 if self.pos[0] < 0 or self.pos[0] > WIDTH: self.vel[0] *= -0.5 if self.pos[1] < 0 or self.pos[1] > HEIGHT: self.vel[1] *= -0.5 # 生命周期 self.life -= 0.5 if self.life <= 0: self.__init__() def draw(self): # 3D透视效果(简单的z轴缩放) scale = 1 - self.pos[2] / 20 size = max(1, self.size * scale) # 根据z轴调整亮度 alpha = min(255, self.life) color = (*self.color[:3], alpha) # 绘制粒子 s = pygame.Surface((size*2, size*2), pygame.SRCALPHA) pygame.draw.circle(s, color, (size, size), size) screen.blit(s, (self.pos[0] - size, self.pos[1] - size)) # 创建粒子群 particles = [Particle() for _ in range(300)] # 主循环 clock = pygame.time.Clock() running = True while running: screen.fill((0, 0, 0)) for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: running = False # 修正此处的拼写错误 for p in particles: p.update() p.draw() pygame.display.flip() clock.tick(60) pygame.quit() ``` 额外需要注意的逻辑点 1. 在 `Particle` 类的 `update` 方法中,当粒子的生命周期 `life` 小于等于 0 时,调用 `self.__init__()` 重新初始化粒子。这意味着粒子会重新随机生成位置和其他属性,要注意避免某些属性在重新初始化时不符合预期。 2. 在计算 3D 透视效果时,使用的是简单的 `z` 轴缩放 `scale = 1 - self.pos[2] / 20`,这种简单的缩放可能无法呈现出非常逼真的 3D 效果。如果需要更真实的效果,可能需要使用更复杂的透视投影算法。 3. 粒子的边界检查仅考虑了 `x` 和 `y` 轴方向,没有对 `z` 轴方向进行边界检查。如果 `z` 轴方向的范围不合理,可能会导致粒子在 `z` 轴上超出预期范围,影响显示效果。 ######[AI写代码神器 | 1142点数解答 | 2025-07-28 22:36:37]
- Python 运行报错:urllib3 网络连接创建失败,原因及排查建议(字节豆包 | 161点数解答 | 2024-10-31 00:39:36)458
- C语言:利用函数实现输入三个整数并从大到小排序输出(字节豆包 | 246点数解答 | 2024-10-22 22:06:20)291
- C语言:输入三个整数并从大到小排序输出的实现代码(字节豆包 | 305点数解答 | 2024-10-22 22:07:27)352
- C语言:输入三个整数并从大到小排序输出的实现(字节豆包 | 259点数解答 | 2024-10-25 00:53:10)235
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)343
- 工程师必知:软件系统用户文档编写九大要点揭秘(百度文心 | 350点数解答 | 2023-11-09 18:23:53)182
- Python 实战:学生信息列表转字典、遍历、深拷贝及数据修改全流程(GPT | 422点数解答 | 2024-10-29 15:43:54)414
- Python实战:学生成绩列表转字典,深拷贝与数据修改操作全解析(字节豆包 | 254点数解答 | 2024-10-29 16:01:39)405
- Golang开发:解析JSON数据时数值默认类型及示例解析(百度文心 | 393点数解答 | 2023-11-09 18:13:06)274
- SQL Working Areas Sizing: Manual vs. Automatic Policy - A Comprehensive Analysis(阿里通义 | 530点数解答 | 2024-05-13 10:55:58)305
- 神秘网页链接背后:暗藏的HTML代码玄机待解!(阿里通义 | 92点数解答 | 2025-07-18 18:23:11)168
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)310