淡出并缩小
本课属于 Coddy Pygame 学习旅程的“音效与游戏体验”单元。第 10 课,共 23 课。
一直保持不变、直到消失的火花看起来就像一个熄灭的点。真实的火花会逐渐冷却:它们会在消亡时缩小并改变颜色。你已经有了表示这一点的数字,也就是粒子的 life。绘制火花时,根据它计算大小和颜色。
半径可以直接根据生命值计算:
radius = p["life"] // 10 + 1还剩 40 帧时,半径是 5;还剩 9 帧或更少时,半径是 1。+ 1 可以确保半径至少为 1:半径为 0 的圆什么也不会画出来,火花就会提前消失。
颜色可以从几个阶段中选择,从炽热到冷却:
if p["life"] > 25:
color = (255, 220, 80)
elif p["life"] > 10:
color = (255, 140, 40)
else:
color = (180, 50, 40)先检查较大的数字。如果顺序反过来,life > 10 也会匹配生命值为 30 的情况,黄色分支就永远不会运行。
挑战
中等让火花在飞行时逐渐冷却。
- 将每个火花的半径设为
life // 10 + 1。 - 当火花的生命值大于 25 时,将它涂成黄色
(255, 220, 80);大于 10 时涂成橙色(255, 140, 40);之后涂成深红色(180, 50, 40)。
按“开始”,再按空格键:圆环会从黄色逐渐变成红色。然后按“检查”。
亲手试试
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Ring of Sparks")
clock = pygame.time.Clock()
DIRECTIONS = [(3, 0), (2, 2), (0, 3), (-2, 2), (-3, 0), (-2, -2), (0, -3), (2, -2)]
particles = []
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
for vx, vy in DIRECTIONS:
particles.append({"x": 240, "y": 180, "vx": vx, "vy": vy, "life": 40})
for p in particles:
p["x"] += p["vx"]
p["y"] += p["vy"]
p["life"] -= 1
screen.fill((20, 20, 36))
for p in particles:
if p["life"] > 0:
pygame.draw.circle(screen, (255, 220, 80), (p["x"], p["y"]), 4)
pygame.display.flip()
clock.tick(60)
pygame.quit()
音效与游戏体验中的所有课
自己练习: Pygame 在线编辑器