• FEATURED

View more

View more

View more

Image of the Day Submit

IOTD | Top Screenshots

The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

Object Collision Problem

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.

3 replies to this topic

#1XsoodX  Members

Posted 05 October 2013 - 06:46 AM

I am trying to make a simple physics based game in SDL, and i require a ball to bounce of lines in game.

However, when the ball collides with the line, it clips through it, messing up the collision count.

The problem is due to the speed of the ball. If the ball travels fast enough, it can pass right through the line.

I use frame independent motion and a circular collision detection for the ball

How can i make sure the collision doesn't clip?

Code For the Ball Collision Detection

bool Projectile::check_collision(Line L)
{
int X1,X2,Y1,Y2,CL;
int Cx=0,Cy=0,CP=0,Px=0,Py=0;
float shortest_distance;
double slopeL=0,slopeP=0;

L.get_Line(X1,Y1,X2,Y2);
getLocation(Px,Py);
Px+=size/2;
Py+=size/2;

if(X2-X1!=0)
{
slopeL=(Y2-Y1)/(X2-X1);
slopeP=-1/slopeL;
//Y=mX+C;
CL=Y1-slopeL*X1;
CP=Py-slopeP*Px;
Cx=(CL-CP)/(slopeP-slopeL);
Cy=slopeP*Cx + CP;
}
else
{
Cy=Py;
if(X2>Px)
Cx=X2-Px;
else
Cx=Px-X2;
}

shortest_distance=sqrt(pow(double(Cx-Px),2)+pow(double(Cy-Py),2));

if(shortest_distance<size/2)
{
if(X2-X1!=0)
on_collision(slopeL);
else
on_collision();
return true;
}
else
return false;

}


#2serumas  Members

Posted 05 October 2013 - 09:28 AM

for such simple game you could:

divide circle step by 10

and do 10 circle moves and collision checks per loop.

#3shacktar  Members

Posted 05 October 2013 - 12:38 PM

A potential solution is to "sweep out" a box (or capsule if the ends are rounded to fit the circle) that describes the motion of the circle over the whole timestep and then to do collision detection with the swept out box (or capsule). The picture below shows a swept out box.

Posted 06 October 2013 - 03:10 PM

A potential solution is to "sweep out" a box (or capsule if the ends are rounded to fit the circle) that describes the motion of the circle over the whole timestep and then to do collision detection with the swept out box (or capsule). The picture below shows a swept out box.

I did something like this in the past, and then put it to intercepted and moved the ball to the halfway position and set the velocities so that on the next time step it would be right... if your total velocity drops too low though, you may have to adjust where you move it to. My speed stayed the same for the whole problem, so moving it halfway worked great. You could do a deterioration to find out exactly where to move it if you needed to. (For instance, if losing 50% of velocity, would probably want to move back to 25% along the way of the box before adjusting velocity).

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.