Jump to content

  • Log In with Google      Sign In   
  • Create Account


XNA Realistic Bouncing


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
3 replies to this topic

#1 Kaandimandimanbopbobop   Members   -  Reputation: 109

Like
0Likes
Like

Posted 19 May 2012 - 06:20 PM

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.

Sponsor:

#2 zacaj   Members   -  Reputation: 643

Like
1Likes
Like

Posted 19 May 2012 - 06:38 PM

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/

#3 Michael Tanczos   Senior Staff   -  Reputation: 5163

Like
0Likes
Like

Posted 22 May 2012 - 11:51 AM

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, 22 May 2012 - 11:57 AM.


#4 ButchDean   Members   -  Reputation: 110

Like
0Likes
Like

Posted 22 May 2012 - 08:13 PM

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.




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