Desvanecer e diminuir
Parte da seção Som e sensação de jogo do Journey de Pygame da Coddy. Lição 10 de 23.
Uma faísca que permanece igual até desaparecer parece um ponto que foi apagado. Faíscas de verdade esfriam: elas encolhem e mudam de cor enquanto se apagam. Você já tem o número para isso: o life da partícula. Calcule o tamanho e a cor a partir dele ao desenhar.
O raio pode acompanhar diretamente o valor de life:
radius = p["life"] // 10 + 1Com 40 quadros restantes, o raio é 5; com 9 ou menos, é 1. O + 1 mantém o raio em 1 ou mais: um círculo com raio 0 não desenha nada, e a faísca desapareceria antes da hora.
Para a cor, escolha entre alguns tons, do quente ao frio:
if p["life"] > 25:
color = (255, 220, 80)
elif p["life"] > 10:
color = (255, 140, 40)
else:
color = (180, 50, 40)Teste primeiro o número maior. Se fosse escrito na ordem inversa, life > 10 também corresponderia a uma vida de 30, e o ramo amarelo nunca seria executado.
Desafio
MédioA tecla Espaço cria um anel de 8 faíscas, cada uma durando 40 quadros. Faça com que elas esfriem enquanto voam:
- Desenhe cada faísca com raio
life // 10 + 1. - Use amarelo
(255, 220, 80)enquanto sua vida estiver acima de 25, laranja(255, 140, 40)enquanto estiver acima de 10 e vermelho-escuro(180, 50, 40)depois disso.
Experimente você mesmo
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()
Todas as lições de Som e sensação de jogo
4Vibração da Tela e Flash de Impacto
Vibração da TelaFlash de ImpactoPausa no ImpactoMantenha a Discrição6Aprimorando a Patrulha Estelar
Sons da Patrulha EstelarFaíscas a Cada AcertoPratique por conta própria: Playground de Pygame