Pular para o conteúdo
Jogos Digitais
Nesta página
  1. Objetivos de aprendizagem
  2. Pré-requisitos
  3. Materiais
  4. Conceitos
  5. Exemplos
  6. Tutorial passo a passo
  7. Imagens
  8. Indicação da interface
  9. O código completo
  10. Explicação do código
  11. Resultado esperado
  12. Problemas comuns
  13. Exercício guiado
  14. Desafio individual
  15. Desafio avançado (opcional)
  16. Critérios de avaliação
  17. Checklist de conclusão
  18. Extensão

Módulo 8 · Aula 8.2 · GDScript: variáveis, funções e decisões

Carga horáriaDificuldadeFerramentaCompetências
10 h/a⭐⭐⭐Godot 4.7C1, C2

Objetivos de aprendizagem

  1. Anexar um script a um nó e entender extends.
  2. Criar variáveis e constantes com tipo (int, float, String, bool).
  3. Escrever funções que recebem valores e devolvem resultado.
  4. Usar if/elif/else e for, e ver o resultado com print no painel Saída.
  5. Saber quando roda _ready e quando roda _process.

Pré-requisitos

Aula 8.1. Módulo 1 (variáveis, condições, repetições e blocos personalizados no Scratch).

Materiais

Godot 4.7 com o projeto exemplos/laboratorio, cena cenas/ola_godot.tscn.

Conceitos

Script. Arquivo .gd ligado a um nó. A primeira linha, extends Node, diz de que tipo é o nó: o script ganha tudo o que aquele nó sabe fazer.

Indentação manda. Em GDScript, o que fica "dentro" de uma função ou de um if é marcado pelo recuo (tecla Tab), como no Python. Recuo errado é erro.

Variável e constante.

var sementes := 3          # variável: muda durante o jogo
const PRECO := 2.5         # constante: nunca muda
var nome: String = "Ana"   # tipo escrito por extenso

:= deixa o Godot descobrir o tipo pelo valor. Com tipo, o editor avisa antes de rodar quando algo não combina.

TipoExemploNo Scratch
int3, -10número inteiro
float2.5número com vírgula (no código é ponto)
String"Sertanejo"texto
booltrue, falsesim/não

Função. Um bloco com nome, como o "Criar um Bloco" do Scratch (Aula 1.8). Pode receber valores e devolver um resultado com return.

func valor_total(quantidade: int) -> float:
    return quantidade * PRECO

Funções que o Godot chama sozinho.

FunçãoQuando roda
_ready()uma vez, quando o nó entra na cena
_process(delta)todo quadro (umas 60 vezes por segundo)
_physics_process(delta)a cada passo da física (60 por segundo, sempre igual); para movimento com colisão

delta é o tempo, em segundos, desde o quadro anterior.

Exemplos

Scratch (Módulo 1)GDScript
quando a bandeira for clicadafunc _ready():
semprefunc _process(delta):
mude sementes para 3sementes = 3
adicione 2 a sementessementes += 2
diga nomeprint(nome)
se ... então ... senãoif ...: / else:
repita 3 vezesfor volta in 3:

Tutorial passo a passo

Parte A. Ler e rodar (60 min)

  1. Abra o laboratório, a cena ola_godot.tscn e o script ola.gd (ícone de pergaminho ao lado do nó Ola).
  2. Execute a cena atual. Veja o painel Saída: as linhas do print aparecem na ordem do código (captura abaixo).
  3. Explique cada linha da Saída apontando a linha do código que a escreveu.

Parte B. Primeiro script próprio (120 min)

  1. No seu projeto da Aula 8.1, selecione o nó raiz e use Adicionar Script (o botão de pergaminho com + da aba Cena; a dica diz "Associar um novo script, ou um já existente, ao nó selecionado"). Na janela Criar Script, confira Herda: e Caminho: e clique em Criar.
  2. Escreva um _ready que cria var vidas := 3, tira 1 e mostra com print.
  3. Escreva uma função dobro(numero: int) -> int e mostre dobro(21).

Parte C. Decisões e repetições (150 min)

  1. Uma variável pontos. Se for 10 ou mais, print("Ganhou!"); senão, print("Faltam ", 10 - pontos).
  2. Com for i in 5, mostre a tabuada do 7 até 7 × 5.
  3. Com for i in range(1, 11), mostre de 1 a 10.

Parte D. _process (90 min)

  1. Crie var tempo := 0.0 e, em _process(delta), faça tempo += delta. Mostre com print só quando tempo passar de 3 (e depois volte para 0). Isso é um relógio feito à mão.
  2. Compare com o temporizador do GDevelop (Aula 3.8).

Imagens

  • ../../../recursos/imagens/godot/captura-godot-ola-saida.png: script ola.gd e o painel Saída com o resultado.

Indicação da interface

ItemNome na tela
anexar scriptbotão da aba Cena com a dica "Associar um novo script, ou um já existente, ao nó selecionado." (ação Adicionar Script)
janela de novo scriptCriar Script, com Herda:, Modelo:, Script Embutido: e Caminho:
editor de códigotela Script, no alto do editor
resultado do printpainel Saída (embaixo)
limpar a SaídaApagar Saída

O código completo

exemplos/laboratorio/scripts/ola.gd:

extends Node

const PRECO := 2.5   # constante: não muda durante o jogo

var nome := "Sertanejo"
var sementes := 3


func _ready() -> void:
	print("Olá, Godot! Eu sou o ", nome)
	print("Tenho ", sementes, " sementes.")
	sementes += 2
	print("Agora tenho ", sementes, " sementes.")
	print("Elas valem ", valor_total(sementes), " reais.")
	if sementes >= 5:
		print("Dá para plantar uma fileira!")
	else:
		print("Ainda é pouco.")
	for volta in 3:
		print("Volta número ", volta)


func valor_total(quantidade: int) -> float:
	return quantidade * PRECO

Saída (conferida no Godot 4.7.2):

Olá, Godot! Eu sou o Sertanejo
Tenho 3 sementes.
Agora tenho 5 sementes.
Elas valem 12.5 reais.
Dá para plantar uma fileira!
Volta número 0
Volta número 1
Volta número 2

Explicação do código

  • print junta vários valores separados por vírgula.
  • for volta in 3 conta 0, 1, 2: começa no zero, como as listas.
  • -> void diz que _ready não devolve nada; -> float diz que valor_total devolve número com vírgula.
  • O 12.5 sai com ponto: em código, o separador decimal é o ponto. Para mostrar "12,50" ao jogador, é preciso formatar o texto (Aula 8.8).

Resultado esperado

Script próprio com variáveis, função, if e for, e a Saída explicada linha a linha.

Problemas comuns

Mensagem ou sintomaCausaSolução
erro de indentaçãomisturou espaço com Tab, ou recuo faltandousar só Tab; o editor mostra as setinhas de Tab
Identifier "x" not declaredvariável usada antes de criar, ou nome com letra diferentecriar com var; conferir maiúsculas
nada aparece na Saídao script não está no nó da cena executadaconferir o ícone de pergaminho no nó
print(0.1 + 0.2) mostra 0.3, mas 0.1 + 0.2 == 0.3 dá false (conferido no Godot 4.7.2)o número com vírgula é guardado com uma diferença minúscula, que o print escondecomparar dinheiro em centavos inteiros (Aula 7.7), ou usar is_equal_approx

Exercício guiado

O que aparece na Saída?

var a := 10
a -= 3
if a > 5:
	print("grande ", a)
else:
	print("pequeno ", a)

(Resposta: grande 7.)

Desafio individual

Escreva func eh_par(n: int) -> bool e use num for de 1 a 10 para mostrar só os pares. Dica: n % 2 == 0.

Desafio avançado (opcional)

Escreva uma função que recebe a quantidade de sementes e devolve o texto certo no singular ou plural ("1 semente", "3 sementes"). O Sementes em Godot usa essa ideia na tela de fim.

Critérios de avaliação

  • Código com recuo certo, sem erros no editor.
  • Variáveis com nomes que dizem o que guardam, em português e sem acento.
  • Explica o que cada linha faz.

Checklist de conclusão

Extensão

Matemática: escreva uma função que calcula a área de um retângulo e outra o perímetro. Teste com 3 × 4.