Jump to content

  • Log In with Google      Sign In   
  • Create Account

Precision

Member Since 23 May 2013
Offline Last Active Jun 05 2013 01:42 AM

Topics I've Started

Dynamic Bounding Box for Sprites in DX9 C++

23 May 2013 - 11:53 PM

EDIT: Guys we found the problem.

 

Disabling the Menu bar at the top, and disabling the window bar ( Making the window a PoPup basically) Fixed the issue.

 

They were throwing off the onscreen values!

 

Hello, I'm building a button class in which it will take in a sprite object that I also created, and use the position and dimensions of the sprite to generate a bounding box around it to check for collisions with the mouse With Min Max Collision Detection.

 

The Collision Detection algorithm I'm using is definitely not the problem, as I can see the bounding box being put in the wrong place.

 

Below is the code that generates the bounding box for the sprite:

 

ButtonCollisionBox is a structure of just floats.

 

ButtonNuteral is the sprite class I wrote.

 

Sprites are supposedly drawn from the top left, so I set  the boundingboxes Min to the ButtonNuterals Position, and I set the BoundingBox max to the ButtonNuterals Width and Height from the sprites position.

 

 

ButtonCollisionBox.Left = ButtonNuteral->GetSpritePosition().x;
ButtonCollisionBox.Top = ButtonNuteral->GetSpritePosition().y;
ButtonCollisionBox.Right = ButtonNuteral->GetSpritePosition().x + ButtonNuteral->GetWidth();
ButtonCollisionBox.Bottom = ButtonNuteral->GetSpritePosition().y+ ButtonNuteral->GetHeight();
 

 

 
The Sprite is being drawn with these lines:
 
Button Position is the Button Class I created, and the Zero is for rotation, which is not needed here.
 

 

ButtonNuteral->Update(ButtonPosition,0);
ButtonNuteral->Draw();
 

 

 

 

This should work flawlessly, but the Bounding Boxes top left is being drawn just a little inside the button Image, but not at the corner like it should be.

 

In order to see this, I am drawing text at the top left of the boundingbox  by passing the ButtonCollisionBoxes information into this function:

 

 

void DrawFont(ID3DXFont* font,std::string input,float Left, float Right, float Top, float Bottom,int R, int G, int B, int Alpha)
{
RECT TempRect;
TempRect.left = Left;
TempRect.right = Right;
TempRect.top = Top;
TempRect.bottom = Bottom;


D3DCOLOR TextColor = D3DCOLOR_ARGB(Alpha,R,G,B);
LPSTR s = const_cast<char *>(input.c_str());
font->DrawTextA(NULL,s,-1,&TempRect,DT_TOP|DT_LEFT,TextColor);
}
 

 

 
And I also have the button changing color and making sound once the Mouse Bounding box(1,1,1,1 box) collides with the ButtonCollisionBox:
 

 

MouseRect.left = MouseX - 1;
MouseRect.right = MouseX + 1;
MouseRect.top = MouseY - 1;
MouseRect.bottom = MouseY +1;
 

 

 
I pass all that information into this MinMax Function:
 

 

bool CollisionLibrary::BoundingBoxes::MinMaxCollision(float Square1MaxX,float Square1MaxY,float Square1MinX,float Square1MinY,float Square2MaxX,float Square2MaxY,float Square2MinX,float Square2MinY)
{





if(Square1MaxX >= Square2MinX && Square1MinX <= Square2MaxX)
{
if(Square1MaxX >= Square2MinX && Square1MinX <= Square2MaxX && Square1MaxY >= Square2MinY && Square1MinY <= Square2MaxY)
{
return true;
}
else
{
return false;
}


}
else
{
return false;
}


}
 

Ending up with a function call like this:

 

 

if(CD.BoundingBoxes.MinMaxCollision(MouseRect.right,MouseRect.bottom,MouseRect.left,MouseRect.top,ButtonCollisionBox.Right,ButtonCollisionBox.Bottom,ButtonCollisionBox.Left,ButtonCollisionBox.Top))
{
Mouseover = true;
}
 

 

 

Yet the bounding Box comes out in the wrong place, (1- 2 pixels Under the D in "Dynamic Bounding Box") as seen in Problem.png.

 

 

During Runtime, the collision Box is:

Left = 960

Top = 540
Right = 1472
Bottom = 668
 
And the Sprite is: 
 
Sprites Position: 960,540
Dimension 512,128
 
 
Nothing is being scaled. Can someone please help?
 
Why are they at the same positions, yet the bounding box isn't bounding the whole image?!
 

 


PARTNERS