Construct do Zero: Física, Colisões e Resolução de Problemas Comuns

Capítulo 6

Tempo estimado de leitura: 9 minutos

+ Exercício

O que é “colisão” no Construct (e por que existem tipos diferentes)

No Construct, “colisão” pode significar duas coisas diferentes: bloqueio físico (um objeto impede o outro de passar) e detecção de contato (um objeto apenas “percebe” que encostou no outro). Para jogos 2D, você escolhe o tipo conforme a necessidade: plataformas e paredes precisam bloquear; coletáveis e gatilhos normalmente só precisam detectar.

Solid, Platform e Physics: quando usar cada um

  • Solid: transforma um objeto em “parede” para outros behaviors que respeitam sólidos (ex.: Platform). É simples e leve. Use para chão, paredes, blocos, obstáculos estáticos.
  • Platform (behavior): movimento típico de plataforma (gravidade, pulo, controle lateral) e já vem com resolução de colisão com Solid. Use para personagem em jogo de plataforma.
  • Physics (behavior): simulação física (massa, atrito, restituição, forças). Use quando você precisa de empurrões realistas, objetos rolando, caixas com peso, etc. Exige mais ajustes e pode gerar instabilidades se misturar com Platform de forma inadequada.

Regra prática: se seu jogo é plataforma clássico, comece com Platform + Solids. Só use Physics quando a simulação for parte do gameplay.

Overlap vs Collision: diferença que muda o resultado

Overlap (sobreposição)

Overlap acontece quando as áreas de colisão (hitboxes) se intersectam. Ele não impede que um objeto atravesse o outro; apenas dispara eventos do tipo “está sobrepondo”. É ideal para:

  • Coletáveis (moedas, chaves)
  • Triggers (áreas de dano, checkpoints)
  • Interações sem bloqueio (zona de conversa, área de detecção)

Collision (colisão/bloqueio)

“Colisão” no sentido de bloqueio depende do sistema: com Platform, o bloqueio ocorre quando o personagem encontra um Solid. Com Physics, o bloqueio ocorre entre corpos físicos. Use quando você precisa que o objeto pare ou seja empurrado.

Hitboxes (polígonos de colisão): configurando para evitar bugs

Grande parte dos problemas comuns (prender em cantos, atravessar, jitter) vem de hitboxes mal ajustadas. No Construct, a hitbox padrão do Sprite costuma seguir o retângulo da imagem, mas você pode editar.

Continue em nosso aplicativo e ...
  • Ouça o áudio com a tela desligada
  • Ganhe Certificado após a conclusão
  • + de 5000 cursos para você explorar!
ou continue lendo abaixo...
Download App

Baixar o aplicativo

Boas práticas de hitbox

  • Personagem com hitbox simples: prefira retângulo ou polígono com poucos pontos. Evite contornar detalhes (cabelo, arma, pontas) porque isso cria “ganchos” que prendem em cantos.
  • Plataformas e paredes: use retângulos limpos. Se o sprite tem bordas irregulares, mantenha a hitbox reta para estabilidade.
  • Coletáveis: hitbox um pouco menor que o sprite pode evitar coleta “injusta” por encostar em pixels externos.

Passo a passo: editar a hitbox

  1. Abra o Sprite no editor de imagem.
  2. Procure a opção de Editar polígono de colisão (collision polygon).
  3. Defina um retângulo simples para personagem e plataformas (ou um polígono com poucos vértices).
  4. Teste encostando em quinas e bordas; se prender, simplifique ainda mais.

Camadas e “grupos” de colisão: organizando quem colide com quem

Mesmo sem “programar”, você precisa organizar regras de interação. No Construct, isso normalmente é feito com famílias (Families), tags por variável e eventos filtrando tipos. A ideia é: plataformas bloqueiam o jogador, mas não bloqueiam coletáveis; inimigos podem bloquear ou causar dano; triggers não bloqueiam nada.

Estratégia prática (sem repetir fundamentos de Event Sheets)

  • Crie uma Family chamada F_Solids para todos os blocos/plataformas que devem bloquear.
  • Crie uma Family chamada F_Collectibles para moedas/itens.
  • Se usar Physics em alguns objetos, separe em F_PhysicsBodies para facilitar eventos e ajustes.

Com isso, você configura comportamentos e eventos mirando famílias, reduzindo erros de “objeto errado colidindo”.

Problemas comuns e como resolver (tunneling, cantos e jitter)

1) Atravessar objetos (tunneling)

Tunneling acontece quando um objeto se move rápido demais e “pula” de um lado para o outro sem detectar a colisão no meio (principalmente em projéteis e objetos com Physics).

Como evitar tunneling (prático)

  • Reduza a velocidade máxima do objeto rápido (quando possível).
  • Aumente a taxa de simulação do Physics (mais precisão, mais custo). Em projetos com Physics, procure opções como steps/substeps ou configurações de iteração/precisão.
  • Use detecção por “raycast”/linha (quando disponível via recursos do Construct/Physics) para projéteis: em vez de depender só do overlap por frame, você verifica o caminho entre a posição anterior e a atual.
  • Projéteis com hitbox maior (um pouco) podem reduzir falhas de detecção, mas é um ajuste de compromisso.

2) Prender em cantos (corner sticking)

Isso ocorre quando a hitbox do personagem “engata” em quinas, ou quando a geometria do cenário tem degraus/irregularidades pequenas.

Como reduzir prender em cantos

  • Simplifique a hitbox do personagem (retângulo limpo).
  • Evite plataformas com colisão serrilhada: mantenha colisão reta mesmo se o sprite tiver detalhes.
  • Arredonde o design: em vez de quinas com 1px de diferença, use blocos alinhados em grid.
  • Use “margem” visual: deixe o sprite parecer encostar, mas a hitbox ser um pouco menor nas laterais.

3) Tremedeira (jitter) ao encostar/empurrar

Jitter é a oscilação rápida quando dois objetos tentam se resolver mutuamente (comum em Physics, ou quando você mistura empurrão manual com colisão automática).

Como reduzir jitter

  • Não misture Platform e Physics no mesmo objeto. Se o personagem é Platform, evite dar Physics nele.
  • Evite empurrar manualmente um Solid com eventos enquanto o Platform tenta resolver colisão ao mesmo tempo. Para caixas empurráveis, prefira Physics para a caixa e trate o personagem de forma compatível (ou use um sistema de “empurrão” consistente sem Solid).
  • Ajuste atrito/restituição em objetos Physics: restituição alta (quique) e atrito inadequado podem gerar vibração.
  • Garanta alinhamento: objetos repousando em superfícies devem ter hitboxes retas e alinhadas.

Respostas consistentes: parar, empurrar, destruir e tocar som

Uma interação “boa” é previsível: encostou na parede, para; encostou na caixa, empurra; encostou no coletável, coleta; encostou no espinho, toma dano; e cada ação dispara feedback (som/partícula) sem repetir infinitamente.

Evitar repetição de eventos (som e destruição)

  • Para coletáveis, prefira disparar no primeiro contato e depois destruir/desativar o item imediatamente.
  • Para sons de colisão, use um cooldown por variável (ex.: canPlayHitSound) ou toque apenas quando a velocidade/estado indicar impacto real.

Exercício guiado: cenário com plataformas, obstáculos e coletáveis (overlap) + respostas

Objetivo do exercício

Criar uma fase simples com: plataformas que bloqueiam, obstáculos que param ou destroem, uma caixa empurrável (opcional), coletáveis por overlap e sons consistentes.

1) Montagem do cenário (plataformas e paredes)

  1. Crie um Sprite para Plataforma (pode ser um retângulo).
  2. Marque a Plataforma como Solid.
  3. Duplique e monte chão, paredes e alguns degraus. Mantenha alinhado em grid para reduzir cantos problemáticos.
  4. Coloque tudo na Family F_Solids (opcional, mas recomendado).

2) Personagem com Platform e hitbox estável

  1. No personagem, adicione o behavior Platform.
  2. Ajuste valores típicos: velocidade, aceleração, desaceleração, força do pulo e gravidade (conforme seu jogo).
  3. Edite a hitbox do personagem para um retângulo simples, ligeiramente menor que o sprite nas laterais.
  4. Teste: correr e pular em quinas. Se prender, simplifique ainda mais a hitbox e revise degraus irregulares.

3) Coletáveis com Overlap (sem bloquear)

  1. Crie um Sprite Moeda (ou item).
  2. Não marque como Solid.
  3. Edite a hitbox (pode ser circular/poligonal simples) e, se necessário, um pouco menor.
  4. Coloque as moedas em locais que exijam pulo.

Eventos sugeridos (coleta consistente)

Player overlaps Moeda  -> Add 1 to Score  -> Play sound "coin"  -> Destroy Moeda

Se você notar som duplicando por múltiplas moedas no mesmo frame, garanta que cada moeda seja destruída no mesmo evento e evite tocar som em loops.

4) Obstáculo que causa dano (overlap) e obstáculo que bloqueia (solid)

Crie dois tipos:

  • Espinho: não é Solid, usa overlap para causar dano/respawn.
  • Bloco: é Solid, bloqueia o movimento.
Player overlaps Espinho  -> Subtract 1 from HP  -> Play sound "hurt"  -> Set Player position to RespawnX, RespawnY

Para evitar perder muita vida em um único encosto, use uma variável de invencibilidade temporária (ex.: invincible) e condicione o evento.

5) Caixa empurrável (duas abordagens)

Abordagem A (simples, sem Physics): empurrão controlado

Boa para jogos de puzzle onde a caixa se move em grid ou com empurrão “seco”. A caixa pode ser Solid, mas isso costuma conflitar com empurrões manuais. Alternativa: caixa não Solid e você impede atravessar com lógica de bloqueio (mais trabalho). Se quiser manter simples, use Physics na caixa (abordagem B).

Abordagem B (recomendada para empurrar): Physics na caixa

  1. Crie Sprite Caixa.
  2. Adicione behavior Physics na Caixa.
  3. Defina a Caixa como corpo dinâmico (padrão) e ajuste massa/atrito.
  4. Crie o chão/paredes como Physics também (estáticos) OU mantenha um conjunto separado de colisões físicas (não misture com Solids para o mesmo propósito).

Se seu personagem está com Platform, evite tentar “resolver” empurrão físico perfeito entre Platform e Physics. Uma solução comum é: personagem Platform empurra a caixa aplicando força/impulso na caixa quando encosta lateralmente, mas sem transformar o personagem em corpo físico.

Player is overlapping Caixa (on left/right side condition)  -> Caixa: Apply force toward push direction

Se houver jitter, reduza a força, aumente atrito e garanta hitboxes retas.

6) Sons de impacto sem spam

Para tocar som ao bater em parede/chão, prefira condições de “mudança de estado” (ex.: estava no ar e agora está no chão) em vez de tocar enquanto estiver colidindo.

Player: Is on floor AND Player: Was in air (ou usando variável lastOnFloor)  -> Play sound "land"

Para impactos laterais, use um cooldown:

Player collides with Solid AND hitCooldown = 0  -> Play sound "hit"  -> Set hitCooldown = 0.2

Depois, reduza hitCooldown com o tempo (em um evento de tick).

Checklist de depuração rápida (quando algo “não bate”)

SintomaCausa provávelAjuste rápido
Personagem atravessa parede em alta velocidadeTunneling / passo de simulação baixoReduzir velocidade, aumentar precisão/substeps (Physics) ou usar raycast para projéteis
Prende em quinasHitbox detalhada / cenário serrilhadoHitbox retangular, colisões retas, alinhar em grid
Treme ao encostarResoluções conflitantes / atrito/restituiçãoNão misturar Platform+Physics no mesmo objeto, ajustar atrito/restituição, reduzir forças
Som toca várias vezesEvento rodando a cada frame de contatoUsar mudança de estado, cooldown, destruir item no mesmo evento
Coletável “não pega” às vezesHitbox pequena demais / frame skipAumentar hitbox, garantir overlap consistente, evitar velocidades extremas

Agora responda o exercício sobre o conteúdo:

Ao criar uma moeda que deve ser coletada pelo personagem sem bloquear o movimento, qual configuração e tipo de interação é a mais adequada no Construct?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Coletáveis normalmente não devem bloquear. Use Overlap para detectar o contato e, no mesmo evento, aplicar o efeito (ex.: pontuação), tocar o som e destruir/desativar a moeda para evitar repetição.

Próximo capitúlo

Construct do Zero: Câmera, Scroll e Parallax para Jogos 2D

Arrow Right Icon
Capa do Ebook gratuito Construct do Zero: Desenvolvendo Jogos 2D Sem Programar (com Eventos)
33%

Construct do Zero: Desenvolvendo Jogos 2D Sem Programar (com Eventos)

Novo curso

18 páginas

Baixe o app para ganhar Certificação grátis e ouvir os cursos em background, mesmo com a tela desligada.