• Advertisement
Sign in to follow this  

XNA Realistic Bouncing

This topic is 2072 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

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 this post


Link to post
Share on other sites
Advertisement
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) Edited by Michael Tanczos

Share this post


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

Share this post


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

  • Advertisement