O que são Behaviors e por que usar para movimento
No Construct, Behaviors são “módulos” prontos que adicionam capacidades a um objeto sem você precisar programar do zero. Para movimento 2D, eles resolvem a parte física e matemática (velocidade, aceleração, gravidade, colisões), enquanto os eventos entram para dar controle fino: travar o personagem, aplicar um dash, virar o sprite, limitar áreas e reagir a situações do jogo.
Neste capítulo você vai aplicar e configurar três behaviors comuns de movimento: 8Direction (movimento livre), Top-down (movimento com aceleração/desaceleração mais “suave”) e Platform (pulo/gravidade). Em seguida, vai combinar com eventos para ajustes que o behavior sozinho não cobre.
Escolhendo o behavior certo (8Direction, Top-down ou Platform)
| Behavior | Quando usar | Pontos fortes | Cuidados |
|---|---|---|---|
| 8Direction | Jogos com movimento em 8 direções (WASD/analógico), sem gravidade | Configuração rápida, resposta imediata | Pode ficar “seco” sem aceleração; precisa de eventos para dash/travas |
| Top-down | Movimento top-down com sensação de inércia (acelera e freia) | Aceleração/desaceleração nativas, sensação mais natural | Exige ajuste fino para não ficar “escorregadio” |
| Platform | Plataforma/lateral com pulo e gravidade | Gravidade, pulo, controle no ar, colisão com chão | Precisa de sólidos bem configurados e atenção a rampas/escadas |
Passo a passo: Movimento com 8Direction (movimento livre)
1) Aplicar o behavior no personagem
- Selecione o sprite do personagem.
- Em Behaviors > Add > escolha 8Direction.
2) Configurar velocidade e resposta
Nas propriedades do 8Direction, ajuste:
- Max speed: velocidade máxima (ex.: 220).
- Acceleration: quão rápido chega na velocidade (ex.: 1200).
- Deceleration: quão rápido para (ex.: 1400).
- Directions: 4 ou 8 direções (use 8 para diagonal).
- Set angle: se ligado, o objeto gira para a direção do movimento. Para personagens com animação, geralmente deixe desligado e controle a “virada” via eventos.
3) Colisão com paredes
Para impedir atravessar paredes, use objetos de parede com behavior Solid (ou um tilemap configurado como sólido, dependendo do seu projeto). O 8Direction respeita sólidos automaticamente.
Passo a passo: Movimento Top-down (aceleração/desaceleração mais natural)
1) Aplicar o behavior
- Selecione o personagem > Add behavior > Top-down.
2) Ajustar parâmetros principais
- Max speed (ex.: 200).
- Acceleration (ex.: 900).
- Deceleration (ex.: 1100).
- Rotate: normalmente Off para não girar o sprite.
Dica prática: se o personagem “patina”, aumente Deceleration. Se demora a responder, aumente Acceleration.
- Ouça o áudio com a tela desligada
- Ganhe Certificado após a conclusão
- + de 5000 cursos para você explorar!
Baixar o aplicativo
Passo a passo: Movimento Platform (pulo e gravidade)
1) Aplicar o behavior Platform
- Selecione o personagem > Add behavior > Platform.
2) Configurar velocidade, pulo e gravidade
Parâmetros típicos para começar (ajuste ao seu jogo):
- Max speed: 260
- Acceleration: 1500
- Deceleration: 1700
- Jump strength: 650
- Gravity: 1500
- Max fall speed: 900
3) Preparar chão e plataformas
- Marque o chão/plataformas como Solid.
- Se usar plataformas que atravessam por baixo (tipo “one-way”), use behavior específico de plataforma one-way (se estiver no seu plano) ou uma lógica com eventos e colisões; para este exercício, foque em sólidos comuns.
Combinando Behaviors com eventos para controle fino
Behaviors resolvem o movimento base, mas jogos quase sempre precisam de regras extras. A seguir, padrões práticos para você adaptar ao seu personagem.
1) Bloquear/desbloquear movimento (cutscene, diálogo, stun)
Crie uma variável no personagem:
- isLocked (booleano ou número 0/1)
Eventos (exemplo genérico):
Event: Player.isLocked = 1 -> Player.8Direction: Set enabled = false (ou Top-down/Platform: Set enabled = false)Event: Player.isLocked = 0 -> Player.8Direction: Set enabled = trueObservação: use o action equivalente do behavior que você estiver usando (8Direction/Top-down/Platform). A ideia é a mesma: desativar o behavior para travar o movimento.
2) Dash simples (impulso rápido com cooldown)
Objetivo: ao apertar uma tecla (ex.: Shift), o personagem dá um impulso curto na direção atual. Vamos usar eventos para: (1) impedir spam com cooldown, (2) aplicar impulso, (3) opcionalmente travar controle durante o dash.
Crie variáveis no personagem:
- canDash (inicia 1)
- dashTime (número, inicia 0)
- dashDirX e dashDirY (para top-down/8dir) ou dashDir (para plataforma, esquerda/direita)
Exemplo de lógica (8Direction/Top-down):
On key Shift pressed AND Player.canDash = 1 AND Player.isLocked = 0 -> Set Player.canDash = 0; Set Player.dashTime = 0.12On key Shift pressed ... -> Set dashDirX = sign(Player.8Direction.VectorX) ; Set dashDirY = sign(Player.8Direction.VectorY)Every tick AND Player.dashTime > 0 -> Player: Set position to (X + dashDirX * 900 * dt, Y + dashDirY * 900 * dt); Set dashTime = dashTime - dtEvery tick AND Player.dashTime <= 0 AND Player.canDash = 0 -> (start cooldown timer) after 0.6s set canDash = 1Notas importantes:
- Direção do dash: se o jogador estiver parado, você pode usar a “última direção” salva em variáveis (ex.: lastDirX/lastDirY) para ainda permitir dash.
- Colisão durante dash: se você mover por posição, o personagem pode “forçar” atravessar cantos. Para reduzir isso, mantenha paredes como Solid e teste; se necessário, diminua a força do dash ou aplique dash por velocidade (quando o behavior permitir) em vez de teleporte por posição.
- Travar controle: durante dash, você pode desativar o behavior e mover manualmente, reativando ao final.
3) Virar o sprite (flip) conforme direção
Mesmo com movement behavior, a animação geralmente precisa de um “espelhamento” para esquerda/direita.
Exemplo (para jogos laterais ou top-down com sprite olhando para lados):
Every tick: if Player is moving left -> Player: Set mirrored = trueEvery tick: if Player is moving right -> Player: Set mirrored = falseComo detectar “moving left/right”:
- 8Direction: use o vetor X (negativo = esquerda, positivo = direita) ou compare posição atual com posição anterior (salva em variáveis).
- Top-down: mesma ideia (vetor/velocidade no eixo X).
- Platform: use a entrada (tecla esquerda/direita) ou a velocidade X do behavior.
4) Ajuste de velocidade máxima em situações (lama, gelo, buff)
Você pode alterar parâmetros do behavior em tempo real via eventos. Exemplo: ao entrar numa área de lama, reduzir Max speed e aumentar Deceleration.
On collision Player with MudArea -> Player.Top-down: Set max speed = 120On end overlap Player with MudArea -> Player.Top-down: Set max speed = 200Exercício guiado: movimento completo + limites do mapa
Objetivo do exercício
- Implementar movimento completo do personagem (escolha 1: 8Direction, Top-down ou Platform conforme seu jogo).
- Configurar aceleração, desaceleração e velocidade máxima (e pulo/gravidade se for Platform).
- Adicionar: bloquear movimento (isLocked), dash simples e virar sprite.
- Limitar a área jogável com paredes/limites para o personagem não sair do mapa.
Parte A — Movimento base
- Aplique o behavior escolhido no personagem.
- Ajuste os valores iniciais sugeridos neste capítulo e teste no preview.
- Crie um conjunto de paredes (sprites simples ou tilemap) e aplique Solid.
- Teste colisão: o personagem deve parar ao encostar nas paredes.
Parte B — Limites do mapa (paredes invisíveis)
Crie 4 objetos retangulares (ou um único objeto com instâncias) para formar uma “moldura” em volta da área jogável:
- Top (limite superior)
- Bottom (limite inferior)
- Left (limite esquerdo)
- Right (limite direito)
Configuração:
- Defina esses limites como Solid.
- Deixe invisível no jogo (opacidade 0% ou marque como não visível no início), mas mantenha a colisão ativa.
Alternativa (sem sólidos): se preferir, use evento para “clamp” da posição (prender X/Y dentro de um intervalo). Isso é útil em top-down sem paredes internas, mas com bordas fixas.
Every tick -> Player: Set X to clamp(Player.X, minX, maxX)Every tick -> Player: Set Y to clamp(Player.Y, minY, maxY)Parte C — Bloqueio de movimento
- Crie a variável isLocked no personagem.
- Faça um evento de teste: ao apertar uma tecla (ex.: L), alternar isLocked entre 0 e 1.
- Quando isLocked=1, desative o behavior de movimento.
Parte D — Dash simples
- Crie canDash e dashTime.
- Ao apertar Shift, se canDash=1 e isLocked=0, iniciar dashTime e colocar canDash=0.
- Durante dashTime, mova o personagem com impulso (por posição com dt) e, se quiser, desative o behavior para evitar interferência.
- Ao terminar, reative o behavior e inicie cooldown para canDash voltar a 1.
Parte E — Virar sprite
- Adicione eventos para espelhar o sprite quando mover para esquerda/direita.
- Teste com animações de andar/parado: o flip deve acontecer sem girar o objeto.
Checklist de validação
- O personagem se move com a sensação desejada (resposta, aceleração e freio).
- Não atravessa paredes e não sai da área jogável.
- Ao travar (isLocked=1), o personagem para e não responde ao input.
- Dash funciona, tem duração curta e cooldown.
- Sprite vira corretamente para esquerda/direita.