1、设计背景
最近在网上看到了很多粒子爱心的python源码,所以就突发奇想也做一个爱心,但是粒子爱心这么多人做了就没什么意思了,那我就来做一个3D粉嫩旋转爱心,要的就是别出心裁,出人意料。这发给财务小姐姐,我恏大力的春天不就来了!!
2、使用技术
这次使用的是一个python很流行的游戏设计库pygame,这个库基本上可以做大部分单机小游戏,而且有独立的社区,很值得去研究一下。
3、源码如下:
好的,废话不多说,上源码!(注释都在代码里)
import pygame
from math import sin, cos, pi
import random
# 初始化Pygame
pygame.init()
# 设置窗口
WIDTH = 800
HEIGHT = 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("流动的粒子爱心")
# 粒子类
class Particle:
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
self.original_x = x
self.original_y = y
self.original_z = z
self.color = (255, 192, 203) # 粉色
self.size = random.randint(2, 4)
self.speed = random.uniform(0.02, 0.05)
self.offset = random.uniform(0, 2 * pi)
def update(self, time):
# 添加波动效果
wave = sin(time + self.offset) * 0.5
self.x = self.original_x + wave
self.y = self.original_y + wave
self.z = self.original_z + wave
# 生成心形粒子
def create_heart_particles(num_particles):
particles = []
for _ in range(num_particles):
t = random.uniform(0, 2 * pi)
r = random.uniform(0, 2)
x = 16 * (sin(t) ** 3)
y = -(13 * cos(t) - 5 * cos(2*t) - 2 * cos(3*t) - cos(4*t))
z = random.uniform(-5, 5)
particles.append(Particle(x, y, z))
return particles
# 创建粒子
particles = create_heart_particles(5000) # 增加粒子数量
# 主循环
running = True
angle = 0
time = 0
clock = pygame.time.Clock()
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 清空屏幕
screen.fill((0, 0, 0))
# 更新时间
time += 0.05
# 更新和绘制粒子
for particle in particles:
# 更新粒子位置
particle.update(time)
# 3D旋转
x = particle.x * cos(angle) - particle.z * sin(angle)
z = particle.x * sin(angle) + particle.z * cos(angle)
# 3D到2D的投影
scale = 200 / (z + 20)
x2d = int(x * scale + WIDTH/2)
y2d = int(particle.y * scale + HEIGHT/2)
# 绘制粒子,添加渐变色效果
if 0 <= x2d < WIDTH and 0 <= y2d < HEIGHT:
size = int(particle.size * scale)
if size < 1:
size = 1
# 根据波动改变颜色
color_offset = int(abs(sin(time + particle.offset)) * 55)
color = (255, 192 - color_offset, 203 - color_offset)
pygame.draw.circle(screen, color, (x2d, y2d), size)
angle += 0.01 # 减慢旋转速度
pygame.display.flip()
clock.tick(60)
pygame.quit()
4、最终效果
效果大概是这个样子的,这个效果实现也是没有任何素材,直接就能够运行,打包起来也很方便!
学会了就赶紧发给财务小姐姐吧!!!
标签:cos,小姐姐,particle,python,self,random,particles,pygame,3D From: https://blog.csdn.net/m0_73747952/article/details/143747044