teoria

O Loop do Jogo: update() e draw()

Aprenda sobre o loop do jogo: update() e draw()

25 min
Aula 5 de 5

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:

  1. Atualiza o estado do jogo: Onde estão os personagens? Qual a pontuação? Houve alguma colisão?
  2. 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 esquerda

Neste 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ção

Neste 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:

  1. update() age: Calcula o que mudou no jogo (ex: player se moveu).
  2. draw() mostra: Desenha o player na sua nova posição.
  3. 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:

  1. Salve o código acima em um arquivo chamado game_loop_exemplo.py.
  2. Abra o terminal na pasta onde você salvou o arquivo.
  3. Execute o comando: pgzrun game_loop_exemplo.py
  4. 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 e draw() 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)! 🎮✨

© 2025 Escola All Dev. Todos os direitos reservados.

O Loop do Jogo: update() e draw() - Game Maker: Python com Pgzero para Crianças | escola.all.dev.br