XNA Realistic Bouncing

Started by
2 comments, last by Mathematix 11 years, 11 months ago
Hey. I made a game where you shoot balls at walls, and you try to get the ball to bounce into a goal. So, when the ball bounces of one wall and hits the other, I realized a problem. Instead of going in another direction, it bounces right back to the first line, and then the second, in an endless cycle. Right now, when the ball collides, I am simply multiplying its direction vector2 by -1. Is there a better way to do this to create a more realistic bounce?

All help would be appreciated.
Advertisement
You're multiplying BOTH axes of the vector2 by -1? So no matter what angle the wall is the ball just bounces back the way it came? Are your walls always horizontal/vertical or can they be at any angle? In any case, check out http://www.gamedev.net/topic/510581-2d-reflection/
You need to compute the surface normal for the wall first, which is basically a vector that points out in a perpendicular direction. To do that you'll need two points that make up the edge of the wall.. the following code should work fine for that purpose:


public Vector2 ComputeNormal(Vector2 point1, Vector2 point2)
{
Vector2 normal = new Vector2();
normal.X = point2.Y - point1.Y;
normal.Y = point1.X - point2.X;

normal.Normalize();

return normal;
}



That will at least return a unit vector perpendicular to the wall, and then you can use the built in reflect method to do the reflection.. something like:


normal = ComputeNormal(wallpoint1, wallpoint2);
shotVelocity = Vector2.Reflect(shotVelocity, normal);



Your direction vector is essentially the same thing as a velocity vector I'd imagine so long as you aren't making sure it's always a unit vector (unit vectors are a vector with magnitude one, which is direction only)
If you wish to have a more realistic bounce, you can look into collision resolution. How this works is that once the collision is detected you used various parameters to simulate how the object would act depending on its closing velocity, consistency, etc. It's a lot more work though.

This topic is closed to new replies.

Advertisement