# XNA Realistic Bouncing

## Recommended Posts

Kaan Aksoy    109
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.

##### Share on other sites
zacaj    667
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 [url="http://www.gamedev.net/topic/510581-2d-reflection/"]http://www.gamedev.net/topic/510581-2d-reflection/[/url]

##### Share on other sites
Michael Tanczos    5681
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:

[code]
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;
}

[/code]

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:

[code]
normal = ComputeNormal(wallpoint1, wallpoint2);
shotVelocity = Vector2.Reflect(shotVelocity, normal);
[/code]

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) Edited by Michael Tanczos

##### Share on other sites
Mathematix    259
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.