Metodo de colisão por pixel

1 view
Skip to first unread message

Gilberto Junior

unread,
Apr 4, 2012, 9:59:56 AM4/4/12
to EN05140 - Tópicos Especiais em Computação: Desenvolvimento de Jogos
//No Metodo Load Content

protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw
textures.
spriteBatch = new SpriteBatch(GraphicsDevice);

marioSpriteTexture =
this.Content.Load<Texture2D>("mario");
luigiSpriteTexture =
this.Content.Load<Texture2D>("luigi");

dadosTexturaMario = new Color[marioSpriteTexture.Width *
marioSpriteTexture.Height]; //Não esqueça de declarar os atributos no
game 1
marioSpriteTexture.GetData(dadosTexturaMario);

dadosTexturaLuigi = new Color[luigiSpriteTexture.Width *
luigiSpriteTexture.Height];
luigiSpriteTexture.GetData(dadosTexturaLuigi);
}

//Metodo de colisão por pixel
void colisaoPorPixel()
{

Rectangle retanguloMario = new
Rectangle((int)marioPosition.X, (int)marioPosition.Y,
marioSpriteTexture.Width, marioSpriteTexture.Height);
Rectangle retanguloLuigi = new
Rectangle((int)luigiPosition.X, (int)luigiPosition.Y,
luigiSpriteTexture.Width, luigiSpriteTexture.Height);


int cima = Math.Max(retanguloMario.Top,
retanguloLuigi.Top);
int baixo = Math.Min(retanguloMario.Bottom,
retanguloLuigi.Bottom);
int esquerda = Math.Max(retanguloMario.Left,
retanguloLuigi.Left);
int direita = Math.Min(retanguloMario.Right,
retanguloLuigi.Right);

isColisao = false;

for (int y = cima; y < baixo; y++)
{
for (int x = esquerda; x < direita; x++)
{

//Verifica a cor de ambos os pixels neste momento
Color colorMario = dadosTexturaMario[((x-
retanguloMario.Left)+(y-retanguloMario.Top)*retanguloMario.Width)];

Color colorLuigi = dadosTexturaLuigi[(x -
retanguloLuigi.Left) + (y - retanguloLuigi.Top) *
retanguloLuigi.Width];


if ((colorMario.A != 0) && (colorLuigi.A != 0))
{
isColisao = true;
break;
}


}

}


}
Reply all
Reply to author
Forward
0 new messages