Como detectar uma colisão entre um sprite e uma forma gerada pelo usuário de algum tipo.
Por exemplo. Existem alguns objetos na tela. O usuário pega o dedo e desenha uma forma de círculo em torno de um objeto (a regra de seleção é pintar um círculo em torno do sprite, mas as formas de pintura podem ser diversas). Preciso detectar qual objeto selecionado, como:
collision-detection
Huwell
fonte
fonte
Respostas:
Se a forma for desenhada principalmente com segmentos de linha do usuário (ou curvas de Bezier com pontos de controle), você poderá implementar um algoritmo amplamente utilizado, conhecido como Teorema do Eixo Separador . Simplificando: se houver um eixo (vetor unitário representando uma direção) no qual as formas não se sobrepõem (seus valores projetados não resultam em uma diferença positiva), os objetos não se sobrepõem. Eu usei isso no passado e funcionou como um encanto.
fonte
Se a forma for desenhada à mão, como na Crayon Physics , você poderá segurar uma série de linhas retas e verificar colisões com cada uma delas. Apesar das linhas retas, você pode usar curvas de Bezier ou algo parecido.
fonte
As abordagens dependem de quais estruturas de dados você escolhe, sejam elas bitmaps ou vetores.
A primeira abordagem pode lidar com formas complexas arbitrárias, é simples de implementar, mas usa mais memória. Na verdade, você pode reduzir a sobrecarga da memória usando a compactação e acelerá-la usando estruturas hierárquicas de dados (octrees) ...
Segunda abordagem, não é tão simples de implementar, mas usa mais poder de processamento.
Em cada caso, meça se isso for importante. Eu tentaria fazer o primeiro porque é mais simples de implementar. Boa sorte. :)
fonte