Estou criando um jogo de plataformas e implementamos a detecção de colisões por pixel. No entanto, isso causou 2 obstáculos que ainda não descobri. O primeiro obstáculo, de que trata esta questão, é que não sei como encontrar com eficiência o ponto de impacto (meu outro problema provavelmente será uma pergunta diferente neste StackExchange).
Meu personagem cai ou pula em uma determinada taxa em pixels. Ou seja, todos os quadros em que o personagem pode cair 4 pixels ou pular 4 pixels, por exemplo. Se o personagem cair e cruzar um objeto, ele deverá pousar nele (e vice-versa, se estiver pulando e atingindo um objeto, deve começar a cair novamente). No entanto, se, por exemplo, um caractere cair 4 pixels e isso os colocar 3 pixels em um objeto, eles pararão de cair, mas não estarão no local apropriado. O personagem deve parecer parar no primeiro pixel de impacto.
Então, como posso encontrar com eficiência o ponto de impacto? Eu só tenho uma vaga idéia de comparar apenas os pixels do contorno, testar a colisão e aumentá-los para cima ou para baixo em um até que ocorra uma colisão, mas parece que pode ser complicado remover.
Se você quiser conhecer a plataforma, estou desenvolvendo usando o XNA para Windows Phone 7.