Estou trabalhando em um jogo 2D em que você usa tinta para adicionar ladrilhos a um nível e agora estou trabalhando para adicionar ladrilhos de urdidura. Eu o configurei para que certas tintas orientadas à direção usem dois pontos (um começo e um fim) para determinar em qual direção as peças apontarão (esquerda, direita, cima, baixo). As peças de urdidura possuem esses pontos, mas serão adicionado a duas outras listas (início e fim da distorção). A maneira como os warps funcionam é: se o jogador acertar um bloco, eles serão teleportados para o bloco correspondente. Agora, se eu quiser que isso funcione corretamente, preciso fazê-lo para que o jogador não possa ser teleportado para uma parede ou fora do mapa. Então, preciso mover o ponto para um ladrilho aberto, exatamente a um espaço de qualquer parede.
Qual seria a melhor forma de fazer isso?
Respostas:
Se tudo o que você deseja fazer é garantir que o bloco clicado tenha blocos abertos, eu apenas criaria uma função que verifique os blocos ao seu redor. E depois chame isso no bloco clicado.
Você pode configurá-lo em um loop (aninhado) ou apenas criar instruções if para ele. Então, no pseudo-código:
Editar com base no comentário
Há duas maneiras de lidar com a situação:
fonte
Eu acho que você precisará encontrar o retângulo "livre" mais próximo de um bloco de urdidura, onde o jogador pode caber.
Há uma pergunta semelhante no stackoverflow. Clique para ver .
fonte