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()