Módulo 4 · Aula 4.7 · Organizar: grupos de eventos e funções
| Carga horária | Dificuldade | Ferramenta | Competências |
|---|---|---|---|
| 10 h/a | ⭐⭐⭐ | GDevelop 5 (gdevelop.io) | C2, C5 |
Objetivos de aprendizagem
- Organizar uma folha de eventos grande em grupos com nome.
- Criar uma extensão com uma função de ação própria.
- Passar um objeto como parâmetro para a função.
- Explicar quando vale a pena criar uma função.
Pré-requisitos
Aulas 4.1 a 4.6.
Materiais
Computador com o GDevelop; a Trilha montada até a Aula 4.6.
Conceitos
Grupo de eventos. Uma "pasta" na folha de eventos, com nome e cor, que pode ser recolhida. A Trilha tem 7 grupos: Começo da partida, Pausa, Jogador, Coletas e checkpoint, Inimigos e perigos, Dano e vidas, Placar e fim. Com tudo recolhido, a folha cabe numa tela e serve de índice do jogo.
Função. Um pedaço de eventos com nome próprio, que vira uma ação nova. A Trilha tem a função Piscar: deixa um objeto alternando entre meio transparente e opaco. Na folha ela aparece como "Fazer Jogador piscar", igual a uma ação nativa.
Parâmetro. O que a função recebe. Piscar recebe um objeto do tipo Sprite. Assim a mesma função serve para o jogador, para um inimigo ferido ou para um item prestes a sumir.
Extensão. O lugar onde as funções moram. A Trilha tem a extensão Utilidades. Uma extensão pode ser copiada para outro projeto.
A conta do pisca. TimeFromStart() é o tempo desde o início da cena. Vezes 10, arredondado para baixo e com resto da divisão por 2 (mod), dá 0, 1, 0, 1... trocando a cada 0,1 s. Se der 0, opacidade 70; se der 1, opacidade 255.
Quando criar uma função. Quando o mesmo conjunto de ações aparece em dois lugares ou mais, ou quando dar um nome deixa o evento muito mais fácil de ler.
Exemplos
| Função | Recebe | Faz |
|---|---|---|
| Piscar | um objeto | alterna a opacidade |
| Tremer a tela (ideia) | intensidade | mexe a câmera por um instante |
| Soltar partículas (ideia) | posição | cria pedacinhos que se espalham |
Tutorial passo a passo
Parte A. Grupos (60 min)
- Na folha de eventos da cena
Jogo, adicione um grupo (botão de grupo na barra da folha) chamado "Jogador". - Arraste para dentro os eventos de animação, de virar e da câmera.
- Repita para os outros seis grupos. Dê cores diferentes.
- Recolha todos. A folha virou um índice.
Parte B. A extensão e a função (90 min)
- No gerenciador do projeto, crie uma extensão nova e renomeie para
Utilidades. - Adicione uma função. Em Configuração de Função: Tipo de função = Ação; Nome completo = "Piscar"; Descrição = "Faz o objeto piscar"; Sentença na Folha de Eventos =
Fazer _PARAM1_ piscar. - Parâmetro #1: Tipo = Objetos; Tipo de objeto = Sprite; nome
Objeto; Rótulo = "Objeto". - Dentro da função, dois eventos:
mod(floor(TimeFromStart() * 10), 2)= 0 → opacidade deObjeto= 70;mod(floor(TimeFromStart() * 10), 2)= 1 → opacidade deObjeto= 255.
Parte C. Usar a função (40 min)
- No grupo "Dano e vidas": temporizador
"Invencivel"< 1,5 → Fazer Jogador piscar (está nas ações, dentro da extensãoUtilidades). - Temporizador ≥ 1,5 → opacidade do Jogador = 255 (para não ficar meio apagado).
- Visualizar e encoste num espinho.
Imagens
- Captura real, editor da função Piscar com Configuração de Função, parâmetro e os dois eventos:
recursos/imagens/gdevelop/captura-funcao-piscar.png
. - Captura real, folha de eventos com os grupos:
recursos/imagens/gdevelop/captura-trilha-eventos-1.png
. - Captura real, chamada "Fazer Jogador piscar" no grupo "Dano e vidas":
recursos/imagens/gdevelop/captura-trilha-eventos-4.png
.
Indicação da interface
| Item | Onde fica |
|---|---|
| Adicionar grupo | barra de ícones da folha de eventos |
| Extensões do projeto | gerenciador do projeto, seção de funções/extensões |
| Configuração de Função | parte de cima do editor da função |
| Ação da função | janela de ações, procure pelo nome da extensão ou "piscar" |
O código completo
Extensão Utilidades, função Piscar (Ação)
Sentença: Fazer _PARAM1_ piscar
Parâmetro 1: Objeto (Objetos, tipo Sprite)
mod(floor(TimeFromStart() * 10), 2) = 0 → Alterar a opacidade de Objeto: definir como 70
mod(floor(TimeFromStart() * 10), 2) = 1 → Alterar a opacidade de Objeto: definir como 255
Na cena Jogo, grupo "Dano e vidas":
O temporizador "Invencivel" < 1.5 segundos → Fazer Jogador piscar
O temporizador "Invencivel" ≥ 1.5 segundos → Alterar a opacidade de Jogador: definir como 255Explicação do código
floorarredonda para baixo;mod(n, 2)dá o resto da divisão por 2. Juntos fazem uma "onda quadrada" de 0 e 1.- O tipo de objeto Sprite no parâmetro é obrigatório: é ele que libera a ação de opacidade dentro da função. (Na primeira versão gerada da Trilha faltou isso, a ação ficou vazia e o teste automático pegou: o jogador não piscava.)
Resultado esperado (testado)
Teste automático: logo depois de um dano, a opacidade do jogador alternou entre 70 e 255; passado 1,5 s, ficou em 255.
Problemas comuns
| Sintoma | Causa | Solução |
|---|---|---|
| Não acho a ação de opacidade dentro da função | parâmetro sem tipo de objeto | Tipo de objeto = Sprite |
| A função não aparece na lista de ações | Tipo de função diferente de Ação | conferir a configuração |
| A sentença mostra "_PARAM1_" | escreveu o número errado | o primeiro parâmetro do usuário é _PARAM1_ |
| O jogador termina meio transparente | falta o evento de opacidade 255 | adicionar o evento ≥ 1,5 |
Exercício guiado
Com TimeFromStart() = 3,47, quanto vale mod(floor(3,47 * 10), 2)? E qual é a opacidade? (Resposta: floor(34,7) = 34; resto de 34 por 2 = 0; opacidade 70.)
Desafio individual
Crie a função Tremer que recebe um número (intensidade) e mexe a câmera para os lados. Use quando o jogador perde vida.
Desafio avançado (opcional)
Mude Piscar para receber também a velocidade (número de piscadas por segundo) como segundo parâmetro.
Critérios de avaliação
- Folha organizada em grupos com nomes claros.
- Função com parâmetro de objeto funcionando.
Checklist de conclusão
Extensão
Uma receita de bolo usa "funções" como "bater as claras". Escreva uma receita que você conhece separando as etapas que se repetem em funções com nome.