Jump to content

  • Log In with Google      Sign In   
  • Create Account


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.






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());


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;
return false;

return false;


Ending up with a function call like this:



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?!