Pessoal, estou tentando fazer uma colisão entre um personagem e os demais Tiles da fase, mas não estou conseguindo, ja rodei a internet inteira mas não consigo resolver o problema.
Detalhando o problema:
- Meu personagem possui 64x64 pixels, assim como todos os elementos da fase
- Quando o personagem colidi com as paredes (Impassable) estas nao colidem exatamente na parede, ou colide antes ou colide depois,
dependendo do ajuste, o personagem por sua vez gruda na parede como chiclete, e não desliza na parede como deveria.
No codigo esta assim:
float Velocidade = 7.0f;
int esquerda = vetorvalorescolisao[0];
int cima = vetorvalorescolisao[1];
int direita = vetorvalorescolisao[2];
int baixo = vetorvalorescolisao[3];
if (keyboardState.IsKeyDown(Keys.Up)) // Ou seja, se personagem precionou para cima.
{
if (ChecarColisao(esquerda, cima, ref tiles, ref map) == false || ChecarColisao(direita, cima, ref tiles, ref map) == false)
{
emcolisaocima = true;
direcao.Y += 0;
}
else
{
if (PosicaoSupaplex.Y > 0)
{
cam.Move(new Vector2(0, -8));
}
emcolisaocima = false;
direcao.Y += -1.0f;
}
PosicaoSupaplex.X = direcao.X * Velocidade;
PosicaoSupaplex.Y = direcao.Y * Velocidade;
}
E o metodo de checar a colisao esta da seguinte maneira:
public bool ChecarColisao(int esquerdadireita, int cimabaixo, ref List<Tile> tiles, ref int[,] map)
{
if (tiles[map[cimabaixo, esquerdadireita]].collision == TileCollision.Impassable)
{
return (false);
}
return (true);
}
Para determinar o que esta ao redor do personagem eu uso o metodo que preenche as variaveis do inicio (aqui que estou calibrando):
public int[] BuscaDados(ref Vector2 PosicaoSupaplex, Texture2D caractersupaplex)
{
int[] vetorvalorescolisao = new int[5];
vetorvalorescolisao[0] = (int)(PosicaoSupaplex.X / 64);//x.esquerda
vetorvalorescolisao[1] = (int)(PosicaoSupaplex.Y / 64);//y.cima
vetorvalorescolisao[2] = (int)((PosicaoSupaplex.X + (64)) / 64);//x.direita
vetorvalorescolisao[3] = (int)((PosicaoSupaplex.Y + (64)) / 64);//y.baixo
return (vetorvalorescolisao);
}
Não sei se consegui explicar muito bem mas se alguem puder me ajudar eu agradeço, meu MSN é bramstoker1688@hotmail.com
Abraços. |
|