Game Maker: Python com Pgzero para Crianças
O Loop do Jogo: update() e draw()
Aprenda sobre o loop do jogo: update() e draw()
O Loop do Jogo: update() e draw()
Olá, futuro(a) Game Maker! 👋 Que bom ter você aqui para mais uma aventura no mundo dos jogos com Python e Pgzero!
Nesta aula teórica, vamos desvendar o segredo por trás de todo jogo: o Loop do Jogo. É ele que faz tudo acontecer, desde o movimento dos personagens até a exibição dos gráficos na tela. Vamos conhecer as duas funções mágicas que controlam esse loop no Pgzero: update() e draw(). ✨
1. Introdução: O Coração do Seu Jogo ❤️
Imagine seu jogo como um filme animado. Para que o filme pareça estar em movimento, várias imagens (quadros) são mostradas rapidamente uma após a outra. Cada um desses quadros é ligeiramente diferente do anterior.
No mundo dos jogos, acontece algo parecido, mas de forma interativa! O "Loop do Jogo" é um ciclo que se repete muitas e muitas vezes por segundo. A cada repetição, ele faz duas coisas principais:
- Atualiza o estado do jogo: Onde estão os personagens? Qual a pontuação? Houve alguma colisão?
- Desenha o novo estado na tela: Mostra tudo atualizado para o jogador.
No Pgzero, essas duas ações são realizadas por duas funções especiais que você vai criar: update() e draw(). Elas são o coração pulsante do seu jogo! 💖
2. Explicando update() e draw() em Detalhes
Vamos entender o que cada uma dessas funções faz e por que elas são tão importantes.
🚀 A Função update(): O Cérebro do Jogo
A função update() é responsável por atualizar a lógica do seu jogo. Pense nela como o cérebro que decide o que vai acontecer a seguir.
O que ela faz?
- Movimentação: Faz os personagens se moverem, inimigos perseguirem, projéteis voarem.
- Colisões: Verifica se dois objetos se tocaram.
- Pontuação: Atualiza a pontuação do jogador.
- Eventos: Controla o que acontece quando um botão é pressionado ou um tempo limite é atingido.
- Estados do jogo: Muda entre telas de menu, jogo, game over, etc.
Quando ela é chamada?
O Pgzero chama a função update() automaticamente e muitas vezes por segundo (geralmente 60 vezes por segundo, ou 60 FPS - Frames Per Second). Isso garante que seu jogo esteja sempre reagindo e calculando o que está acontecendo.
Exemplo simples de update():
# Suponha que temos um ator 'player'
player.x += 1 # Faz o player se mover 1 pixel para a direita a cada update
# Dentro da função update()
def update():
player.x += 1
if player.x > WIDTH: # Se o player sair da tela pela direita
player.x = 0 # Ele reaparece na esquerdaNeste exemplo, a cada vez que update() é chamada, a posição x do player aumenta, fazendo-o se mover.
🎨 A Função draw(): Os Olhos do Jogo
A função draw() é responsável por desenhar tudo na tela. Pense nela como o artista que pinta a imagem do jogo para o jogador ver.
O que ela faz?
- Fundo: Desenha o cenário do seu jogo.
- Atores: Desenha seus personagens, inimigos, itens.
- Texto: Exibe a pontuação, mensagens, tempo.
- Formas: Desenha retângulos, círculos, linhas.
Quando ela é chamada?
O Pgzero chama a função draw() automaticamente e logo após a função update() ser executada (também muitas vezes por segundo). Isso garante que o que você vê na tela é sempre o estado mais recente do jogo.
É importante lembrar: A função draw() NÃO DEVE mudar a lógica do jogo (como mover personagens ou atualizar pontuações). Ela só deve desenhar o que já existe. A lógica é trabalho da update().
Exemplo simples de draw():
# Suponha que temos um ator 'player' e queremos desenhar a pontuação
score = 0 # Variável de pontuação
# Dentro da função draw()
def draw():
screen.fill((128, 0, 128)) # Pinta o fundo da tela de roxo
player.draw() # Desenha o player na sua posição atual
screen.draw.text(f"Pontos: {score}", (10, 10), color="white") # Desenha o texto da pontuaçãoNeste exemplo, a cada vez que draw() é chamada, ela primeiro limpa a tela, pinta um fundo e depois desenha o player e a pontuação na tela.
🤝 Como Elas Trabalham Juntas: O Ciclo Infinito
update() e draw() são como uma equipe perfeita:
update()age: Calcula o que mudou no jogo (ex: player se moveu).draw()mostra: Desenha o player na sua nova posição.- O ciclo se repete:
update()age novamente,draw()mostra novamente, e assim por diante.
É esse ciclo contínuo que cria a ilusão de movimento e interatividade no seu jogo! 🔄
3. Código de Exemplo Oficial (e Prático!) 🧑💻
Vamos ver um exemplo completo de como update() e draw() funcionam em um programa Pgzero. Este é um exemplo clássico e fundamental, muito similar ao que você encontraria na documentação oficial do Pgzero.
# 🚀 Exemplo oficial de update() e draw() com um ator em movimento
# --- Configurações do Jogo ---
WIDTH = 600 # Largura da janela do jogo
HEIGHT = 400 # Altura da janela do jogo
TITLE = "Loop do Jogo com Pgzero" # Título da janela
# --- Criação de Atores e Variáveis ---
# Vamos criar um ator (um quadrado azul) e dar a ele uma velocidade
player = Actor('alien') # 'alien' é uma imagem padrão do Pgzero
player.pos = (WIDTH // 2, HEIGHT // 2) # Posição inicial no centro
player_speed = 3 # Velocidade de movimento do player
score = 0 # Pontuação inicial
# --- Função update(): Lógica do Jogo ---
def update():
global score # Diz ao Python que vamos modificar a variável global 'score'
# Movimentação automática do player
player.x += player_speed
# Se o player atingir as bordas, inverte a direção e aumenta a pontuação
if player.right > WIDTH or player.left < 0:
player_speed = -player_speed # Inverte a direção
score += 1 # Aumenta a pontuação
sounds.eep.play() # Toca um som (se houver um arquivo 'eep.wav' na pasta 'sounds')
# --- Função draw(): Desenho na Tela ---
def draw():
screen.fill((0, 0, 80)) # Pinta o fundo da tela de azul escuro
player.draw() # Desenha o ator 'player'
# Desenha a pontuação na tela
screen.draw.text(f"Pontos: {score}", (10, 10), color="white", fontsize=30)
# Desenha uma mensagem de instrução
screen.draw.text("O alien se move sozinho!", (WIDTH // 2, HEIGHT - 30),
anchor="center", color="yellow", fontsize=20)
Como testar este código:
- Salve o código acima em um arquivo chamado
game_loop_exemplo.py. - Abra o terminal na pasta onde você salvou o arquivo.
- Execute o comando:
pgzrun game_loop_exemplo.py - Veja o alien se mover, quicar nas bordas e a pontuação aumentar!
4. Resumo e Próximos Passos 📝
Parabéns! Você deu um grande passo para entender como os jogos funcionam.
O que aprendemos hoje:
- O Loop do Jogo é o ciclo contínuo que faz seu jogo funcionar.
- A função
update()cuida de toda a lógica do jogo (movimento, colisões, pontuação). - A função
draw()cuida de desenhar tudo na tela para o jogador ver. - Elas trabalham juntas, com
update()calculando o que mudou edraw()mostrando o resultado.
Com update() e draw(), você tem as ferramentas básicas para dar vida aos seus jogos!
No próximo módulo, vamos começar a interagir com o jogo, aprendendo a controlar nossos personagens com o teclado e o mouse! Fique ligado(a)! 🎮✨