Ir para o conteúdo
Avatar do Ned, mascote do GNORGNOR

Personagem tremendo ou grudando na parede no Construct 3? Entenda a colisão

Personagem tremendo ou grudando na parede no Construct 3? Entenda a colisão Você adiciona o Platform behavior ao personagem, coloca Solid no chão e nas paredes, aperta Play e… o personagem gruda na parede. Ou treme parado. Ou parece “engasgar” quando troca de animação. Calma: isso não costuma ser um bug misterioso do Construct. Na…

Ned7 min read

This content isn't available in English yet — you're reading the original.

Personagem tremendo ou grudando na parede no Construct 3? Entenda a colisão

Personagem tremendo ou grudando na parede no Construct 3? Entenda a colisão

Você adiciona o Platform behavior ao personagem, coloca Solid no chão e nas paredes, aperta Play e… o personagem gruda na parede. Ou treme parado. Ou parece “engasgar” quando troca de animação.

Calma: isso não costuma ser um bug misterioso do Construct. Na grande maioria das vezes, o problema está em um destes três lugares:

  1. o Polígono de Colisão muda entre os frames da animação;
  2. o origin muda de lugar entre os frames;
  3. o Comportamento Plataforma está aplicado direto no sprite animado.

Vamos entender por que cada um causa o problema e, no final, montar a solução que a própria documentação do Construct recomenda.

Se esta é sua primeira semana com a engine, vale ler antes Como começar no Construct 3? Conhecendo a engine antes de criar seu primeiro jogo 🎮

🧠 Antes de tudo: a imagem não é o que colide

💡 Conceito

Quando dois objetos se encostam no Construct, a engine não olha para os pixels do desenho. Ela olha para o collision polygon (polígono de colisão): uma forma geométrica invisível associada a cada frame do sprite.

Pense assim: a imagem é a roupa do personagem. O collision polygon é o corpo de verdade. A roupa pode ser larga e arredondada, mas quem bate na parede é o corpo.

Agora voltando ao conceito técnico: cada frame de animação pode ter o seu próprio collision polygon. E é justamente aí que mora boa parte dos problemas.

Culpado 1: o collision polygon muda entre os frames

O Platform behavior verifica o tempo todo se o personagem está encostando em algo sólido. Ele precisa saber onde está o chão, onde está a parede e se há uma rampa.

Agora imagine o personagem encostado na parede. A animação troca de frame e, no frame novo, o polígono é um pouco mais largo. De repente, parte do “corpo” está dentro da parede.

O Platform não esperava isso. Ele tenta resolver a situação, e o resultado aparece para você como tremor, travamento ou movimento torto.

Percebe? O personagem não “decidiu” grudar na parede. Foi a forma de colisão que mudou de tamanho no meio do caminho.

Como verificar:

1 – Dê dois cliques no sprite do personagem para abrir o Editor de Animações.

2 – Selecione a ferramenta Polígono de Edição.

3 – Passe pelos frames de cada animação e observe se o polígono muda de forma ou de tamanho.

Como corrigir no caso mais comum:

1 – Com a ferramenta Collision polygon ativa, clique com o botão direito no canvas e escolha Definir para caixa de limite. Isso transforma o polígono em um retângulo simples.

2 – Clique com o botão direito de novo e escolha Aplicar à toda animação, para que todos os frames daquela animação usem o mesmo polígono.

3 – Repita em cada animação (parado, correndo, pulando…).

    ⚠️ Cuidado

    “Aplicar à toda animação” vale para a animação que está aberta. Se o personagem tem cinco animações, são cinco verificações.

    Culpado 2: o origin muda de lugar entre os frames

    💡 Conceito

    O origin (ponto de origem) é o ponto do sprite que representa a posição X e Y do objeto no jogo. Ele também é o eixo em torno do qual o objeto gira.

    Pense no origin como um alfinete que prende o desenho no tabuleiro. Quando o Construct diz “o personagem está em X = 200”, é o alfinete que está em X = 200. O resto do desenho, e o collision polygon junto com ele, fica posicionado em relação a esse ponto.

    Tradução técnica: se o origin está nos pés em um frame e três pixels acima no frame seguinte, o desenho inteiro “pula” quando a animação troca de frame. O polígono pula junto. E um polígono que pula pode acabar dentro da parede, exatamente como no culpado 1.

    Como corrigir:

    1 – No Editor de Animações, selecione a ferramenta Pontos de Imagem.

    2 – Posicione o Origin. Em um jogo de plataforma visto de lado, o lugar mais prático costuma ser o centro inferior, nos pés do personagem.

    3- Use Aplicar em toda animação para levar essa posição a todos os frames.

    4 – Repita em cada animação e confira frame a frame se o ponto realmente ficou no mesmo lugar do desenho.

      🧪 Experimente

      Quer ver o problema acontecer de propósito? Em um personagem que já funciona bem, mova o origin de um único frame cinco pixels para cima. Rode o jogo e observe o personagem parado.

      Viu o tremor? Agora volte o origin para o lugar e rode de novo. Essa é a relação de causa e efeito que você vai reconhecer nos próximos projetos.

      Culpado 3: o Platform está no sprite animado

      Mesmo com polígonos e origins bem ajustados, existe uma recomendação oficial que resolve o problema pela raiz.

      O tutorial de jogo de plataforma da Scirra orienta aplicar o Platform behavior a um retângulo invisível, sem animações, e posicionar o sprite animado por cima dele. O motivo é o mesmo que vimos até aqui: a troca de frame pode deixar o objeto parcialmente enfiado na parede e confundir o Platform.

      Em outras palavras: em vez de tentar fazer a animação se comportar bem, separamos as responsabilidades.

      🧠 Pense assim

      • PlayerBox: o corpo. Um retângulo que nunca muda, invisível, com o Platform behavior. É ele que anda, pula e colide.
      • PlayerAnim: a roupa. O sprite com todas as animações, sem o Platform. Ele só acompanha o PlayerBox.

      Como o PlayerBox não anima, o polígono dele nunca muda de tamanho. O Platform sempre sabe exatamente onde está o corpo.

      ⚠️ Cuidado

      Este artigo trata de jogos de plataforma vistos de lado, que usam o Platform behavior. Se o seu jogo é visto de cima, o behavior mais comum para o movimento é outro (o 8 Direction), e o diagnóstico pode ser diferente.

      🛠️ Montando o padrão PlayerBox + PlayerAnim

      O corpo (PlayerBox):

      1 – Crie um novo Sprite e desenhe um retângulo de qualquer cor. Renomeie para PlayerBox.

      2 – Ajuste o tamanho para algo próximo do corpo do personagem, sem braços, armas ou cabelo sobrando.

      3 – Coloque o Origin no centro inferior.

      4 – Deixe o collision polygon como retângulo (Definir para caixa de limite).

      5 – Nas propriedades do objeto, desmarque Visibilidade Inicial.

      6 – Adicione o comportamento Plataforma ao PlayerBox (e remova do sprite animado, se ele estava lá).

        A roupa (PlayerAnim):

        1 – Use o sprite animado que você já tem. Renomeie para PlayerAnim, se quiser deixar a organização mais clara.

        2 – Confira se o Origin está nos pés em todos os frames de todas as animações.

          A regra que liga os dois:

          Na Event Sheet, crie um evento:

          • Condição: Sistema → A cada tick
          • Ação: PlayerAnim → Definir posição para outro objeto → PlayerBox

          O parâmetro de image point pode ficar em 0, que corresponde ao origin. Como os dois têm o origin nos pés, a roupa fica exatamente sobre o corpo.

          O cenário:

          Chão e paredes recebem o behavior Solid. Plataformas que o personagem deve atravessar por baixo e pisar por cima recebem Jump-thru.

          Agora teste: ande contra as paredes, pule, encoste nas bordas, troque de animação. O Platform behavior vem com controles de teclado prontos (propriedade Default controls), então dá para testar sem criar nenhum evento de movimento.

          Samurai andando

          🧪 Experimente

          Durante o teste, marque de novo o Initially visible do PlayerBox. Rode o jogo e observe o retângulo e a animação andando juntos.

          Repare que é o retângulo que encosta na parede, não o desenho. Agora aumente a largura do PlayerBox e veja o personagem parar mais longe da parede. Diminua demais e veja o desenho “entrar” nela. Encontre o tamanho que parece certo e desmarque a visibilidade de novo.

          💥 Ainda treme ou gruda? Onde olhar agora

          Com o padrão PlayerBox + PlayerAnim, quem colide é só o PlayerBox. Então o diagnóstico muda de lugar:

          • Treme ou gruda: investigue o PlayerBox (tamanho, origin, collision polygon) e os objetos do cenário onde o problema acontece. Será que o Platform realmente está só no PlayerBox?
          • A animação “pula”, mas o movimento está certo: agora o problema é só visual. Volte ao culpado 2 e confira o origin dos frames do PlayerAnim.

          ✅ Checkpoint

          • O Construct colide usando o Polígono de Colisão, não a imagem.
          • Polígono ou origin mudando entre frames pode deixar o personagem parcialmente dentro da parede.
          • A solução recomendada é separar corpo (PlayerBox, com Platform) e roupa (PlayerAnim, com as animações).

          🎯 Missão GNOR

          1. Pegue o projeto em que o personagem trava (ou crie um novo com um chão e duas paredes).
          2. Monte o padrão PlayerBox + PlayerAnim.
          3. Teste andando contra as paredes e pulando perto delas.

          Desafio extra: quando o jogador anda para a esquerda, o PlayerAnim continua olhando para a direita. Consegue descobrir como fazer a roupa virar para o lado certo sem mexer no PlayerBox?

          Se o seu personagem travava, conta nos comentários qual dos três culpados era o seu.

          Próximo passo

          Agora temos um corpo que colide de forma estável e uma roupa que só acompanha. Só que essa roupa ainda não sabe quando deve correr, pular ou cair. Esse é o próximo problema: trocar a animação de acordo com o que o Platform está fazendo.

          Agradecimentos

          Sprite de Samurai criado por Mattz Art

          Um grande Abraço!

          ned despedindo

          Newsletter

          Keep exploring with GNOR

          Sign-ups aren't live yet: sending will be connected soon.

          Written by

          Ned

          Conversa

          Comentários

          Carregando comentários…

          Deixe seu comentário

          Sem cadastro: só nome e e-mail. Seu e-mail não aparece no site e é usado apenas para identificar o comentário.

          Comentários passam por moderação antes de aparecer.