<< Chapter < Page
  Xna game studio     Page 5 / 11
Chapter >> Page >

A collision with an edge of the game window

The code in Listing 8 checks for a collision with an edge of the game window.

If the sprite collides with an edge, the code in Listing 8 causes the sprite to wrap around and reappear at the opposite edge, moving at the same speed in adifferent direction within the same quadrant as before. In other words, if a sprite is moving down and to the right and collides with the right edge of the window, it will reappear at the left edge, still movingdown and to the right but not in exactly the same direction down and to the right.

Listing 8 . Process a collision with an edge of the game window.

if(position.X<-image.Width){ position.X = windowSize.X;NewDirection(); }//end ifif(position.X>windowSize.X){ position.X = -image.Width/2;NewDirection(); }//end ifif(position.Y<-image.Height) { position.Y = windowSize.Y;NewDirection(); }//end ifif(position.Y>windowSize.Y){ position.Y = -image.Height / 2;NewDirection(); }//end if on position.Y}//end if on elapsed time }//end Move

Modify the position and call the NewDirection method

In all cases shown in Listing 8 , if a collision occurs, the position of the sprite is modified to position the sprite at the opposite edge. Then the methodnamed NewDirection is called to modify the direction pointed to by the direction vector.

The NewDirection method is declared private to prevent it from being accessible to code outside the Sprite class becauseit has no meaning outside the Sprite class.

The end of the Move method

Listing 8 signals the end of the Move method.

The method named NewDirection

The method named NewDirection begins in Listing 9 .

Listing 9 . Beginning of the method named NewDirection.

private void NewDirection() { double length = Math.Sqrt(direction.X * direction.X + direction.Y * direction.Y);Boolean xNegative = (direction.X<0)?true:false; Boolean yNegative = (direction.Y<0)?true:false;

The length of the direction vector and the signs of thecomponents

Listing 9 begins by determining the length of the current direction vector along with the signs of the X and Y components of the vector.

Compute the hypotenuse

The first statement in the method in Listing 9 calls the Math.Sqrt method and uses the Pythagorean Theorem to compute the length of the hypotenuse of the right triangle formed by the Xand Y components of the direction vector. This is the length of the direction vector.

Use the conditional operator

Then the last two statements in Listing 9 use the conditional operator to determine if the signs of the components are negative. If so, the variables named xNegative and/or yNegative are set to true.

Compute components of a new direction vector

Having accomplished that task, the code in Listing 10 computes the components for a new direction vector of the same length with the X and Y components having random (but consistent) lengths and the same signs asbefore.

Compute a new random value for the X component

For the code in Listing 10 to make any sense at all, you must know that the call to random . NextDouble returns a pseudo-random value, uniformly distributed between 0.0 and 1.0.

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Xna game studio. OpenStax CNX. Feb 28, 2014 Download for free at https://legacy.cnx.org/content/col11634/1.6
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Xna game studio' conversation and receive update notifications?

Ask