Dynamic Bounding Box for Sprites in DX9 C++

Started by
1 comment, last by Precision 10 years, 11 months ago

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

Advertisement

Also, I'm new to the website, so hello!

If you need anymore code from me to help solve the problem, ask And I shall supply.

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!

This topic is closed to new replies.

Advertisement