Efeitos
Efeitos Visuais e Iluminação
Um jogo funcional não é o suficiente. O Game Juice (o “Suco” do jogo) é o feedback visual que faz a gameplay ser satisfatória. A Power PPlay 2.0 fornece emissores de partículas nativos, shakes de tela e um sistema de iluminação dinâmica (Fog of War) via renderização subtrativa.
1. Screen Shake e Flash (Feedback Cinestésico)
A classe ScreenEffects afeta diretamente a Câmera e o Buffer de Tela. Use-os para impactos ou quando o jogador levar dano.
from PPlay.effects import ScreenEffects
# No momento em que o player é atingido:
if levou_dano:
# Intensidade 10 pixels, Duração 0.2 segundos
ScreenEffects.shake(10, 0.2)
# Pisca a tela de vermelho com opacidade por 0.1s
ScreenEffects.flash((255, 0, 0), 0.1)
# Não se esqueça de colocar no final do seu loop()!
ScreenEffects.update()
ScreenEffects.apply_to_camera()
2. Emissor de Partículas
A classe ParticleEmitter gera e destrói centenas de pequenos objetos coloridos automaticamente, criando rastros de magia, poeira de pulo ou explosões.
from PPlay.particles import ParticleEmitter
fogo = ParticleEmitter(0, 0)
fogo.cor = (255, 100, 0) # Laranja
fogo.vida_base = 0.5 # Meio segundo de vida por partícula
fogo.intensidade = 5 # 5 partículas por frame
# Se for um efeito contínuo (ex: Tocha ou Foguete):
fogo.set_pos(foguete.x, foguete.y)
fogo.emitir()
# Se for um efeito único (ex: Bomba explodindo):
fogo.explodir(quantidade=50)
# No final do loop():
fogo.update()
fogo.draw()
3. O Sistema de Iluminação (LightingSystem)
Ideal para jogos de terror ou exploração. A engine pinta uma “névoa escura” sobre o mapa e você adiciona círculos de luz que “furam” essa escuridão usando o modo BLEND_RGBA_ADD.
from PPlay.effects import LightingSystem
luzes = LightingSystem(opacidade_noite=240) # Quase breu total
while True:
# Adiciona a lanterna do player no frame atual
luzes.lights.append((player.x + 16, player.y + 16, raio=150, brilho=255))
# Adiciona uma tocha fixa no mapa
luzes.lights.append((500, 300, raio=200, brilho=180))
# O draw() pinta a escuridão e aplica as luzes
# DEVE ser o penúltimo comando do desenho (antes da UI)
luzes.draw()