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