Gilberto Junior
unread,Apr 4, 2012, 9:59:56 AM4/4/12Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
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;
}
}
}
}