{"id":967,"date":"2026-04-02T01:29:55","date_gmt":"2026-04-02T04:29:55","guid":{"rendered":"https:\/\/www2.ic.uff.br\/pplay\/?page_id=967"},"modified":"2026-04-02T01:29:55","modified_gmt":"2026-04-02T04:29:55","slug":"cenas-2-0","status":"publish","type":"page","link":"http:\/\/www2.ic.uff.br\/pplay\/cenas-2-0\/","title":{"rendered":"Cenas"},"content":{"rendered":"\n<div class=\"doc-container\">\n    <div class=\"doc-header\">\n        <h1>Trocando de Fases (Cenas)<\/h1>\n        <div class=\"doc-badge\">M\u00f3dulo: PPlay.scenemanager | Dificuldade: Intermedi\u00e1rio<\/div>\n        <p>A maior causa de &#8220;c\u00f3digo espaguete&#8221; \u00e9 tentar colocar um Menu, a Fase 1 e o Game Over dentro do mesmo <code>while True<\/code>. O <strong>SceneManager<\/strong> introduz a M\u00e1quina de Estados Finita: cada tela \u00e9 uma classe isolada.<\/p>\n    <\/div>\n\n    <div class=\"doc-section\">\n        <h2>1. Arquitetura Orientada a Cenas<\/h2>\n        <p>Para criar uma tela, voc\u00ea herda da classe <code>Scene<\/code>. Ela j\u00e1 te entrega as vari\u00e1veis <code>self.janela<\/code> e <code>self.teclado<\/code> prontas para uso.<\/p>\n        <pre class=\"doc-code\"><code>from PPlay.scenemanager import Scene, SceneManager\n\nclass Menu(Scene):\n    def __init__(self):\n        super().__init__()\n        self.fundo = (10, 10, 30)\n\n    def loop(self):\n        # Transi\u00e7\u00e3o de Cena!\n        if self.teclado.key_down(\"ENTER\"):\n            SceneManager.change_scene(FaseUm())\n\n    def draw(self):\n        self.janela.set_background_color(self.fundo)\n        self.janela.draw_text(\"APERTE ENTER PARA JOGAR\", 200, 300)\n\nclass FaseUm(Scene):\n    def __init__(self):\n        super().__init__()\n        self.player = Sprite(\"hero.png\")\n\n    def loop(self):\n        self.player.move_key_x(300)\n        if self.teclado.key_down(\"ESC\"):\n            SceneManager.change_scene(Menu())\n\n    def draw(self):\n        self.janela.set_background_color(\"black\")\n        self.player.draw()<\/code><\/pre>\n    <\/div>\n\n    <div class=\"doc-section\">\n        <h2>2. O Novo Loop Principal<\/h2>\n        <p>Seu <code>main.py<\/code> agora ficar\u00e1 incrivelmente pequeno e profissional. O SceneManager cuida de rodar o <code>loop()<\/code> e <code>draw()<\/code> da cena certa no momento exato.<\/p>\n        <pre class=\"doc-code\"><code># ... continua\u00e7\u00e3o do c\u00f3digo acima ...\n\njanela = Window(800, 600, \"Meu Jogo com Fases\")\nSceneManager.change_scene(Menu()) # Define a tela inicial\n\nwhile True:\n    SceneManager.run() # Roda a m\u00e1gica\n    janela.update()<\/code><\/pre>\n    <\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Trocando de Fases (Cenas) M\u00f3dulo: PPlay.scenemanager | Dificuldade: Intermedi\u00e1rio A maior causa de &#8220;c\u00f3digo espaguete&#8221; \u00e9 tentar colocar um Menu, a Fase 1 e o Game Over dentro do mesmo while True. O SceneManager introduz a M\u00e1quina de Estados Finita: cada tela \u00e9 uma classe isolada. 1. Arquitetura Orientada a Cenas Para criar uma tela, [&hellip;]<\/p>\n","protected":false},"author":14,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"tutorial-template.php","meta":{"footnotes":""},"_links":{"self":[{"href":"http:\/\/www2.ic.uff.br\/pplay\/wp-json\/wp\/v2\/pages\/967"}],"collection":[{"href":"http:\/\/www2.ic.uff.br\/pplay\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/www2.ic.uff.br\/pplay\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/www2.ic.uff.br\/pplay\/wp-json\/wp\/v2\/users\/14"}],"replies":[{"embeddable":true,"href":"http:\/\/www2.ic.uff.br\/pplay\/wp-json\/wp\/v2\/comments?post=967"}],"version-history":[{"count":1,"href":"http:\/\/www2.ic.uff.br\/pplay\/wp-json\/wp\/v2\/pages\/967\/revisions"}],"predecessor-version":[{"id":969,"href":"http:\/\/www2.ic.uff.br\/pplay\/wp-json\/wp\/v2\/pages\/967\/revisions\/969"}],"wp:attachment":[{"href":"http:\/\/www2.ic.uff.br\/pplay\/wp-json\/wp\/v2\/media?parent=967"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}