<< Chapter < Page | Chapter >> Page > |
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
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.
Listing 8 signals the end of the Move method.
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;
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.
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.
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.
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.
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.
Notification Switch
Would you like to follow the 'Xna game studio' conversation and receive update notifications?