Cenas
Trocando de Fases (Cenas)
Módulo: PPlay.scenemanager | Dificuldade: Intermediário
A maior causa de “código espaguete” é tentar colocar um Menu, a Fase 1 e o Game Over dentro do mesmo while True. O SceneManager introduz a Máquina de Estados Finita: cada tela é uma classe isolada.
1. Arquitetura Orientada a Cenas
Para criar uma tela, você herda da classe Scene. Ela já te entrega as variáveis self.janela e self.teclado prontas para uso.
from PPlay.scenemanager import Scene, SceneManager
class Menu(Scene):
def __init__(self):
super().__init__()
self.fundo = (10, 10, 30)
def loop(self):
# Transição de Cena!
if self.teclado.key_down("ENTER"):
SceneManager.change_scene(FaseUm())
def draw(self):
self.janela.set_background_color(self.fundo)
self.janela.draw_text("APERTE ENTER PARA JOGAR", 200, 300)
class FaseUm(Scene):
def __init__(self):
super().__init__()
self.player = Sprite("hero.png")
def loop(self):
self.player.move_key_x(300)
if self.teclado.key_down("ESC"):
SceneManager.change_scene(Menu())
def draw(self):
self.janela.set_background_color("black")
self.player.draw()
2. O Novo Loop Principal
Seu main.py agora ficará incrivelmente pequeno e profissional. O SceneManager cuida de rodar o loop() e draw() da cena certa no momento exato.
# ... continuação do código acima ...
janela = Window(800, 600, "Meu Jogo com Fases")
SceneManager.change_scene(Menu()) # Define a tela inicial
while True:
SceneManager.run() # Roda a mágica
janela.update()