protected override void Update(GameTime gameTime)
{
MouseState ms = Mouse.GetState();
#region Box1
/*Como a Caixa 1, ficará parada, nao é necesario
* a mudança de seus campos Min e Max. O motivo pelo qual
* a atualização de seus campos Min e Max está sendo efetuada
* no metodo Update, é puramente didatica e caso você deseje realizar
* mais algum teste movimentando o Box1, provalvemente,
* nada será modificado aqui, bastando apenas modificar
* a posicao do Box1
* */
this.boundingBox1.Min = new Vector3(this.box1Position, 0);
this.boundingBox1.Max =
new Vector3(new Vector2(this.box1Position.X + this.box1.Width,
this.box1Position.Y + this.box1.Height)
, 0);
#endregion
#region Box2
//O Box2 sera guiado pelo Mouse
this.box2Position = new Vector2(ms.X, ms.Y);
//Nao é necessário recriar a BoundingBox, é necessario apenas
//redifinir o Ponto Min e Max
/*Redefinindo o ponto minimo, o menor ponto da face de trás da caixa
*/
this.boundingBox2.Min = new Vector3(this.box2Position, 0);
/* Redefinindo o ponto Maximo da BoundingBox; o maior ponto da face frontal
* da caixa
* */
this.boundingBox2.Max =
new Vector3(new Vector2(this.box2Position.X + this.box2.Width,
this.box2Position.Y + this.box2.Height)
, 0);
/*Essas redifinições do ponto maximo e minimo sao necessarias, já que
* o sprite da caixa se movimentará e a BoundingBox nao sabe que
* aquilo que estava contido nela, saiu de suas delimitações; é tarefa do
* programador fazer esse tipo de tratamento
* */
#endregion
#region Metodo Intersects
if (boundingBox1.Intersects(this.boundingBox2))
{
//O Metodo Intersects retornou true, logo, houve colisao
this.box2Color = Color.Red;
}
else
{
//O Metodo Intersects retornou false, logo, nao houve colisao
this.box2Color = Color.White;
}
#endregion
/*Para testar o comportamento do Metodo Contains, comente todo o
* bloco de teste do metodo Intersects acima e retire o comentario
* do bloco de teste do metodo Contains
* */
/*
#region Metodo Contains
if (boundingBox1.Contains(this.boundingBox2) == ContainmentType.Contains)
{
this.box2Color = Color.Yellow;
}
else if (boundingBox1.Contains(this.boundingBox2) == ContainmentType.Disjoint)
{
this.box2Color = Color.White;
}
else if (boundingBox1.Contains(this.boundingBox2) == ContainmentType.Intersects)
{
this.box2Color = Color.Red;
}
#endregion
*/
base.Update(gameTime);
}
...
Projeto para Download:
boundingboxcollision.zip 55714 bytes
Sugestoes, Dúvidas e críticas, como sempre, ajudam muito.
Obrigado!