Como posso definir uma área de colisão complexa em cima de um mapa de blocos?

13

Como muitas pessoas recomendaram, estou usando o editor de mapas Tiled para criar um mapa para o meu jogo e isso é ótimo, principalmente porque o libgdx framework também fornece API para mapas do Tiled.

Entendo que posso definir blocos colidíveis ou não no editor de mapas para poder lidar com qualquer colisão no meu código. Mas atualmente estou em uma situação em que preciso dividir um bloco em áreas colidíveis e não colidíveis. Manualmente, acho que posso definir pontos e linhas de limites das duas áreas e lidar programaticamente com isso. Mas isso é muito trabalho demorado.

Pesquisei bastante no Google e encontrei esse editor de corpo físico. Parece uma ótima ferramenta para automatizar o processo que mencionei acima. O sistema, no entanto, funciona com cada imagem descompactada e não tenho certeza se funcionaria se eu descompactasse a imagem para sua operação.

Gostaria de saber se existe alguma maneira melhor de fazer todo esse processo de definição da área de colisão. Qualquer sugestão será muito apreciada.

Tae-Sung Shin
fonte

Respostas:

22

Como sempre, jogarei algumas idéias na mesa. Certamente, existem várias maneiras de abordar esse problema. Descreverei os três que consegui lembrar e cabe a você decidir qual (se houver) dessas abordagens é boa para o seu projeto.

Idéia 1: padrões repetitivos em seus blocos

Seu sistema precisa ser flexível o suficiente para suportar qualquer área de colisão concebível ou você pode decompô-lo em um conjunto finito de formas de ladrilhos com as quais você pode construir e tratá-las como casos especiais? Aqui estão alguns recursos para ler sobre essa ideia:

Ideia 2: ignorar o mapa de blocos

Sim, ignore completamente o mapa de peças e armazene uma representação poligonal diferente da sua área de colisão. Sobreponha essa geometria no topo do seu mapa baseado em blocos e lide com colisões. Se você não precisa de física, verifique o seguinte recurso:

Caso contrário, acho que você provavelmente poderia usar a ferramenta à qual vinculou.

Ideia 3: Detecção de colisão perfeita de pixels

Use colisões perfeitas em pixels e use uma máscara separada ou apenas o canal alfa em seus blocos para codificar suas áreas de colisão variáveis. Para inspiração, consulte o seguinte guia:

David Gouveia
fonte