Jump to content
  • Advertisement
Sign in to follow this  
Precision

Dynamic Bounding Box for Sprites in DX9 C++

This topic is 2033 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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

 

Edited by Precision

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!