Uma partícula
Parte da seção Som e sensação de jogo do Journey de Pygame da Coddy. Lição 8 de 23.
Faíscas, poeira, fumaça e confetes são feitos de partículas: muitas coisinhas que voam para fora, duram pouco e desaparecem. Uma partícula precisa apenas de alguns números: onde está, quanto se move a cada quadro e quantos quadros ainda tem de vida. Um dicionário as armazena:
{"x": 240, "y": 180, "vx": 2, "vy": -3, "life": 30}vx e vy são sua velocidade: 2 pixels à direita e 3 para cima a cada quadro. Mantenha todas as partículas em uma lista e, a cada quadro, mova todas elas e subtraia um quadro de sua vida:
for p in particles:
p["x"] += p["vx"]
p["y"] += p["vy"]
p["life"] -= 1Desenhe cada partícula enquanto sua vida for maior que 0, como um pequeno círculo:
for p in particles:
if p["life"] > 0:
pygame.draw.circle(screen, (255, 160, 60), (p["x"], p["y"]), 3)Uma partícula não tem imagem nem classe. Ela custa pouco, então um jogo pode ter centenas ao mesmo tempo.
Desafio
FácilFaça o emissor cinza no centro disparar uma faísca:
- Quando a tecla Space for pressionada, anexe
{"x": 240, "y": 180, "vx": 2, "vy": -3, "life": 30}aparticles. - A cada quadro, mova cada partícula de acordo com seus valores de
vxevye diminua seulifeem 1. - Desenhe cada partícula cujo tempo de vida seja maior que 0 como um círculo laranja
(255, 160, 60)de raio 3.
Experimente você mesmo
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Sparks")
clock = pygame.time.Clock()
particles = []
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((30, 30, 46))
pygame.draw.circle(screen, (120, 120, 140), (240, 180), 8)
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