Técnicas e algoritmos para jogos MIDP 2.0

Tenho problemas com o jogo que estou fazendo usando MIDP 2.0
Trata-se de um jogo estilo plataforma, logo meus problemas maiores como vocês devem imaginar são os algoritmos de colisão com o cenário.
Minha técnica inicial (posso mudar/melhorar depois) é a seguinte:
1 - Dentro do loop principal, verifica-se se o personagem colide com o cenário que é um TiledLayer.
2 - Se ele não está colidindo é porque ele está suspenso no ar, logo entra em ação o método que puxa o personagem para baixo até que ele esbarre no TiledLayer.
Os problemas PRINCIPAIS são:
1 - Mesmo testando a colisão com o TiledLayer colidesWith… com o parâmetro true ou false o resultado é o mesmo! O sprite do personagem “entra” um pouco no TiledLayer. Seria problema na imagem usada? Uso uma imagem para o personagem e outra para o TiledLayer ambas no formato .PNG e creio que as duas são sólidas, não possuem transparência, muito pelo contrário, o personagem tem um quadrado ao seu redor pois não sei tirar o fundo da sua imagem.
Então, como faço para garantir que a colisão seja detectada assim que o personagem toque no TiledLayer e ele fique exatamente em cima do TiledLayer? Que técnicas me recomendam na parte de criação e edição das imagens ou na parte dos algoritmos?

2 - Como detectar a colisão de forma diferente de acordo com a posição de cada célula no TiledLayer? Meu TiledLayer só tem um bloco simples, mas o problema é que o personagem não colide apenas pisando em cima do bloco, ele colide de lado com o bloco, ou batendo a cabeça em cima do bloco. Como detectar essas diferentes posições do bloco, se o bloco é o mesmo e se trata de um único TiledLayer?

Obrigado desde já.
Até mais.

Bom, vamos lá…
Vc faz o teste de colisão a cada pixel movimentado? Se não, pode ser isso a sua “imprecisão” do personagem para parar de cair.
Sobre saber onde bateu (pé,cabeça, barriga, etc) vc deve comparar as posições dos envolvidos. Mas só faça isso se o teste básico de colisão apontar que houve colisão, senão você perde muito desempenho se ficar testando isso com cada objeto.
O algoritmo deve ser algo do tipo: Se o objeto está acima do personagem, ele bateu a cabeça, se o objeto está na frente do personagem ele bateu de frente. Se está atrás ele bateu de costas. Se estiver embaixo ele está pisando.
Cada vez que houver colidesWith você faz estes 4 testes pra saber como ele bateu.

Isso ajuda ou viajei?

Até aí tudo bem. Mas o problema é que o teste de colisão é com um TiledLayer, que apesar de ter dezenas de blocos, ele é visto como uma imagem única!
Como individualizar cada célula do TiledLayer para testar se esta célula está ao lado, em cima, ou em baixo do personagem?

Obrigado.

Acho interessante que você faça uma espécie de “bounding box” nos objetos que seu personagem interage. Pois aí vc tem maior controle.
Só que aí vc não utilizará o colidesWith do TyledLayer.
Mas se você sempre fizer objetos retangulares/quadrados é bem simples fazer teste de colisão.

E como seria fazer esse “bounding box” nos objetos em que o personagem interage? Ele interage com um TiledLayer…

Obrigado.

Define um quadrado invisivel em volta do Tyled.
E pra colisão vc testa com os parametros x,y,width e height desse quadrado que é do tamanho do seu objeto.

Eu não posso desenhar um quadrado em volta do TiledLayer…

O TiledLayer tem dezenas de blocos não contínuos…

Obrigado.