Jump to content

  • Log In with Google      Sign In   
  • Create Account

Dynamic Bounding Box for Sprites in DX9 C++


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
2 replies to this topic

#1 Precision   Members   -  Reputation: 102

Like
0Likes
Like

Posted 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.
 

 

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

 

Attached Thumbnails

  • Problem.png

Edited by Precision, 24 May 2013 - 12:30 AM.


Sponsor:

#2 Precision   Members   -  Reputation: 102

Like
0Likes
Like

Posted 23 May 2013 - 11:55 PM

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.



#3 Precision   Members   -  Reputation: 102

Like
0Likes
Like

Posted 24 May 2013 - 12:29 AM

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!






Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS