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.
- Ouça o áudio com a tela desligada
- Ganhe Certificado após a conclusão
- + de 5000 cursos para você explorar!
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
- Abra o Sprite no editor de imagem.
- Procure a opção de Editar polígono de colisão (collision polygon).
- Defina um retângulo simples para personagem e plataformas (ou um polígono com poucos vértices).
- 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_Solidspara todos os blocos/plataformas que devem bloquear. - Crie uma Family chamada
F_Collectiblespara moedas/itens. - Se usar Physics em alguns objetos, separe em
F_PhysicsBodiespara 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)
- Crie um Sprite para Plataforma (pode ser um retângulo).
- Marque a Plataforma como Solid.
- Duplique e monte chão, paredes e alguns degraus. Mantenha alinhado em grid para reduzir cantos problemáticos.
- Coloque tudo na Family
F_Solids(opcional, mas recomendado).
2) Personagem com Platform e hitbox estável
- No personagem, adicione o behavior Platform.
- Ajuste valores típicos: velocidade, aceleração, desaceleração, força do pulo e gravidade (conforme seu jogo).
- Edite a hitbox do personagem para um retângulo simples, ligeiramente menor que o sprite nas laterais.
- Teste: correr e pular em quinas. Se prender, simplifique ainda mais a hitbox e revise degraus irregulares.
3) Coletáveis com Overlap (sem bloquear)
- Crie um Sprite Moeda (ou item).
- Não marque como Solid.
- Edite a hitbox (pode ser circular/poligonal simples) e, se necessário, um pouco menor.
- Coloque as moedas em locais que exijam pulo.
Eventos sugeridos (coleta consistente)
Player overlaps Moeda -> Add 1 to Score -> Play sound "coin" -> Destroy MoedaSe 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, RespawnYPara 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
- Crie Sprite Caixa.
- Adicione behavior Physics na Caixa.
- Defina a Caixa como corpo dinâmico (padrão) e ajuste massa/atrito.
- 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 directionSe 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.2Depois, reduza hitCooldown com o tempo (em um evento de tick).
Checklist de depuração rápida (quando algo “não bate”)
| Sintoma | Causa provável | Ajuste rápido |
|---|---|---|
| Personagem atravessa parede em alta velocidade | Tunneling / passo de simulação baixo | Reduzir velocidade, aumentar precisão/substeps (Physics) ou usar raycast para projéteis |
| Prende em quinas | Hitbox detalhada / cenário serrilhado | Hitbox retangular, colisões retas, alinhar em grid |
| Treme ao encostar | Resoluções conflitantes / atrito/restituição | Não misturar Platform+Physics no mesmo objeto, ajustar atrito/restituição, reduzir forças |
| Som toca várias vezes | Evento rodando a cada frame de contato | Usar mudança de estado, cooldown, destruir item no mesmo evento |
| Coletável “não pega” às vezes | Hitbox pequena demais / frame skip | Aumentar hitbox, garantir overlap consistente, evitar velocidades extremas |