Módulo 8 · Aula 8.2 · GDScript: variáveis, funções e decisões
| Carga horária | Dificuldade | Ferramenta | Competências |
|---|---|---|---|
| 10 h/a | ⭐⭐⭐ | Godot 4.7 | C1, C2 |
Objetivos de aprendizagem
- Anexar um script a um nó e entender
extends. - Criar variáveis e constantes com tipo (
int,float,String,bool). - Escrever funções que recebem valores e devolvem resultado.
- Usar
if/elif/elseefor, e ver o resultado comprintno painel Saída. - Saber quando roda
_readye 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.
| Tipo | Exemplo | No Scratch |
|---|---|---|
int | 3, -10 | número inteiro |
float | 2.5 | número com vírgula (no código é ponto) |
String | "Sertanejo" | texto |
bool | true, false | sim/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 * PRECOFunções que o Godot chama sozinho.
| Função | Quando 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 clicada | func _ready(): |
| sempre | func _process(delta): |
mude sementes para 3 | sementes = 3 |
adicione 2 a sementes | sementes += 2 |
diga nome | print(nome) |
| se ... então ... senão | if ...: / else: |
| repita 3 vezes | for volta in 3: |
Tutorial passo a passo
Parte A. Ler e rodar (60 min)
- Abra o laboratório, a cena
ola_godot.tscne o scriptola.gd(ícone de pergaminho ao lado do nóOla). - Execute a cena atual. Veja o painel Saída: as linhas do
printaparecem na ordem do código (captura abaixo). - Explique cada linha da Saída apontando a linha do código que a escreveu.
Parte B. Primeiro script próprio (120 min)
- 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. - Escreva um
_readyque criavar vidas := 3, tira 1 e mostra comprint. - Escreva uma função
dobro(numero: int) -> inte mostredobro(21).
Parte C. Decisões e repetições (150 min)
- Uma variável
pontos. Se for 10 ou mais,print("Ganhou!"); senão,print("Faltam ", 10 - pontos). - Com
for i in 5, mostre a tabuada do 7 até 7 × 5. - Com
for i in range(1, 11), mostre de 1 a 10.
Parte D. _process (90 min)
- Crie
var tempo := 0.0e, em_process(delta), façatempo += delta. Mostre comprintsó quandotempopassar de 3 (e depois volte para 0). Isso é um relógio feito à mão. - Compare com o temporizador do GDevelop (Aula 3.8).
Imagens
../../../recursos/imagens/godot/captura-godot-ola-saida.png
: script ola.gde o painel Saída com o resultado.
Indicação da interface
| Item | Nome na tela |
|---|---|
| anexar script | botã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 script | Criar Script, com Herda:, Modelo:, Script Embutido: e Caminho: |
| editor de código | tela Script, no alto do editor |
resultado do print | painel Saída (embaixo) |
| limpar a Saída | Apagar 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 * PRECOSaí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 2Explicação do código
printjunta vários valores separados por vírgula.for volta in 3conta 0, 1, 2: começa no zero, como as listas.-> voiddiz que_readynão devolve nada;-> floatdiz quevalor_totaldevolve número com vírgula.- O
12.5sai 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 sintoma | Causa | Solução |
|---|---|---|
| erro de indentação | misturou espaço com Tab, ou recuo faltando | usar só Tab; o editor mostra as setinhas de Tab |
Identifier "x" not declared | variável usada antes de criar, ou nome com letra diferente | criar com var; conferir maiúsculas |
| nada aparece na Saída | o script não está no nó da cena executada | conferir 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 esconde | comparar 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.