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();
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);
}
MouseRect.left = MouseX - 1;
MouseRect.right = MouseX + 1;
MouseRect.top = MouseY - 1;
MouseRect.bottom = MouseY +1;
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