Eu tenho brincado com a mudança de ladrilhos inclinados no XNA e é semi-funcional, mas não completamente satisfatório. Também estive pensando que ter conjuntos de declives predeterminados pode não me dar um terreno que pareça "orgânico" o suficiente. Há também o problema de ter que construir vários tipos diferentes de ladrilhos para cada inclinação quando estão encadeados (apenas ladrilhos de 45 graus encadearão perfeitamente como eu o entendo).
Eu tinha pensado em, de alguma maneira, procurar correntes conectadas de ladrilhos inclinados e tratá-lo como um novo triângulo grande, pois estava tendo problemas com falhas nas bordas onde os ladrilhos inclinados se conectam. Mas, isso leva de volta ao problema de limitar a curvatura do terreno.
Então ... o que eu gostaria de fazer agora é criar uma imagem ou textura simples do terreno de um nível (ou seção do nível) e gerar um mapa de altura simples (dos Y's para cada X) para o terreno. A posição Y do jogador seria apenas atualizada com base na posição X.
Existe uma maneira simples de fazer isso (ou uma maneira melhor de resolver esse problema)? O principal problema que posso ver com esse método é o caso em que há áreas acima do solo que podem ser percorridas. Talvez exista uma maneira de apenas mapear todas as áreas que podem ser percorridas no solo?
Eu estive analisando este bit útil de código: http://thirdpartyninjas.com/blog/2010/07/28/sloped-platform-collision/, mas preciso de uma maneira de gerar os pontos / vetores reais.
Edição: Eu tentei pré-gerar caminhos inclinados usando o link que eu postei, mas agora estou convencido de que devo usar a colisão por pixel, como você sugeriu. Eu estive analisando o exemplo em: http://create.msdn.com/en-US/education/catalog/tutorial/collision_2d_perpixel e estou tentando descobrir como ajustar o sprite após a detecção de uma colisão. Como David sugeriu, fiz alguns pontos do sensor (pés, lados, centro inferior etc.) e posso detectar facilmente quando esses pontos realmente colidem com partes não transparentes de uma segunda textura (inclinação simples). Estou tendo problemas com o algoritmo de como realmente ajustaria a posição do sprite com base em uma colisão.
Digamos que eu detecte uma colisão com a inclinação no pé direito do sprite. Como digitalizar os dados da textura da inclinação para encontrar a posição Y para colocar o pé do sprite, para que ele não fique mais dentro da inclinação? O modo como ele é armazenado como uma matriz 1D no exemplo é um pouco confuso, devo tentar armazenar os dados como uma matriz 2D?
Também notei que várias pessoas mencionam que é melhor separar as verificações de colisão horizontal e verticalmente, por que exatamente?