{"id":971,"date":"2026-04-02T01:35:50","date_gmt":"2026-04-02T04:35:50","guid":{"rendered":"https:\/\/www2.ic.uff.br\/pplay\/?page_id=971"},"modified":"2026-04-02T01:35:50","modified_gmt":"2026-04-02T04:35:50","slug":"efeitos-2-0","status":"publish","type":"page","link":"http:\/\/www2.ic.uff.br\/pplay\/efeitos-2-0\/","title":{"rendered":"Efeitos"},"content":{"rendered":"\n<div class=\"doc-container\">\n    <div class=\"doc-header\">\n        <h1>Efeitos Visuais e Ilumina\u00e7\u00e3o<\/h1>\n        <div class=\"doc-badge\">M\u00f3dulos: particles, effects | Dificuldade: Intermedi\u00e1rio<\/div>\n        <p>Um jogo funcional n\u00e3o \u00e9 o suficiente. O <strong>Game Juice<\/strong> (o &#8220;Suco&#8221; do jogo) \u00e9 o feedback visual que faz a gameplay ser satisfat\u00f3ria. A Power PPlay 2.0 fornece emissores de part\u00edculas nativos, shakes de tela e um sistema de ilumina\u00e7\u00e3o din\u00e2mica (Fog of War) via renderiza\u00e7\u00e3o subtrativa.<\/p>\n    <\/div>\n\n    <div class=\"doc-section\">\n        <h2>1. Screen Shake e Flash (Feedback Cinest\u00e9sico)<\/h2>\n        <p>A classe <code>ScreenEffects<\/code> afeta diretamente a C\u00e2mera e o Buffer de Tela. Use-os para impactos ou quando o jogador levar dano.<\/p>\n        <pre class=\"doc-code\"><code>from PPlay.effects import ScreenEffects\n\n# No momento em que o player \u00e9 atingido:\nif levou_dano:\n    # Intensidade 10 pixels, Dura\u00e7\u00e3o 0.2 segundos\n    ScreenEffects.shake(10, 0.2)\n    # Pisca a tela de vermelho com opacidade por 0.1s\n    ScreenEffects.flash((255, 0, 0), 0.1)\n\n# N\u00e3o se esque\u00e7a de colocar no final do seu loop()!\nScreenEffects.update()\nScreenEffects.apply_to_camera()<\/code><\/pre>\n    <\/div>\n\n    <div class=\"doc-section\">\n        <h2>2. Emissor de Part\u00edculas<\/h2>\n        <p>A classe <code>ParticleEmitter<\/code> gera e destr\u00f3i centenas de pequenos objetos coloridos automaticamente, criando rastros de magia, poeira de pulo ou explos\u00f5es.<\/p>\n        <pre class=\"doc-code\"><code>from PPlay.particles import ParticleEmitter\n\nfogo = ParticleEmitter(0, 0)\nfogo.cor = (255, 100, 0) # Laranja\nfogo.vida_base = 0.5     # Meio segundo de vida por part\u00edcula\nfogo.intensidade = 5     # 5 part\u00edculas por frame\n\n# Se for um efeito cont\u00ednuo (ex: Tocha ou Foguete):\nfogo.set_pos(foguete.x, foguete.y)\nfogo.emitir()\n\n# Se for um efeito \u00fanico (ex: Bomba explodindo):\nfogo.explodir(quantidade=50)\n\n# No final do loop():\nfogo.update()\nfogo.draw()<\/code><\/pre>\n    <\/div>\n\n    <div class=\"doc-section\">\n        <h2>3. O Sistema de Ilumina\u00e7\u00e3o (LightingSystem)<\/h2>\n        <p>Ideal para jogos de terror ou explora\u00e7\u00e3o. A engine pinta uma &#8220;n\u00e9voa escura&#8221; sobre o mapa e voc\u00ea adiciona c\u00edrculos de luz que &#8220;furam&#8221; essa escurid\u00e3o usando o modo <code>BLEND_RGBA_ADD<\/code>.<\/p>\n        <pre class=\"doc-code\"><code>from PPlay.effects import LightingSystem\n\nluzes = LightingSystem(opacidade_noite=240) # Quase breu total\n\nwhile True:\n    # Adiciona a lanterna do player no frame atual\n    luzes.lights.append((player.x + 16, player.y + 16, raio=150, brilho=255))\n    \n    # Adiciona uma tocha fixa no mapa\n    luzes.lights.append((500, 300, raio=200, brilho=180))\n\n    # O draw() pinta a escurid\u00e3o e aplica as luzes\n    # DEVE ser o pen\u00faltimo comando do desenho (antes da UI)\n    luzes.draw()<\/code><\/pre>\n    <\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Efeitos Visuais e Ilumina\u00e7\u00e3o M\u00f3dulos: particles, effects | Dificuldade: Intermedi\u00e1rio Um jogo funcional n\u00e3o \u00e9 o suficiente. O Game Juice (o &#8220;Suco&#8221; do jogo) \u00e9 o feedback visual que faz a gameplay ser satisfat\u00f3ria. A Power PPlay 2.0 fornece emissores de part\u00edculas nativos, shakes de tela e um sistema de ilumina\u00e7\u00e3o din\u00e2mica (Fog of War) [&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\/971"}],"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=971"}],"version-history":[{"count":1,"href":"http:\/\/www2.ic.uff.br\/pplay\/wp-json\/wp\/v2\/pages\/971\/revisions"}],"predecessor-version":[{"id":973,"href":"http:\/\/www2.ic.uff.br\/pplay\/wp-json\/wp\/v2\/pages\/971\/revisions\/973"}],"wp:attachment":[{"href":"http:\/\/www2.ic.uff.br\/pplay\/wp-json\/wp\/v2\/media?parent=971"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}