This page is optimized for mobile devices, if you would prefer the desktop version just click here

0.16 Xna0130-collision detection  (Page 6/9)

The code in Listing 8 is essentially the same as code that I explained in an earlier module so no explanation beyond the embedded comments should benecessary.

The overridden Update method

The overridden Update method begins in Listing 9 .

Listing 9 . Beginning of the overridden Update method.

protected override void Update(GameTime gameTime) {//Tell all the spiders in the list to move. for(int cnt = 0;cnt<spiders.Count;cnt++) { spiders[cnt].Move(gameTime); }//end for loop//Tell all the ladybugs in the list to move. for(int cnt = 0;cnt<ladybugs.Count;cnt++) { ladybugs[cnt].Move(gameTime); }//end for loop

The code in Listing 9 is essentially the same as code that I have explained in earlier modules, so no further explanation should be necessary.

A for loop that controls the collision testing

Listing 10 shows the beginning of a for loop that causes each ladybug Sprite object to test for a collision with the spiders in the list of spiders once during each iteration of the game loop.

If a ladybug detects a collision with a spider, the action described earlier is taken.

Listing 10 . Beginning of a for loop that controls the collision testing.

for(int cnt = 0;cnt<ladybugs.Count;cnt++) {

Not every spider is tested during each iteration

If a ladybug detects a collision with a spider, the remaining spiders in the list are not tested by that ladybug during that iteration of thegame loop. In other words, if a ladybug's rectangle intersects the rectangles belonging to two or more spiders, only the spider closest to the top of the listwill register a collision.

Test for a collision

The code that tests for a collision is shown in Listing 11 .

Listing 11 . Test for a collision.

//Test for a collision between this ladybug and // all of the spiders in the list of spiders.Sprite target = ladybugs[cnt].IsCollision(spiders); if(target != null) {//There was a collision. Cause the spider to // move 128 pixels to the right.target.Position = new Vector2(target.Position.X + 128,target.Position.Y);

The first statement in Listing 11 calls the IsCollision method on the current ladybug object, passing a reference to the list of spiders as a parameter. As you learned earlier,this will cause the ladybug object to test each spider in the list for a collision until either a collision is found or the list is exhausted.

Return a reference to a spider or null

When the IsCollision method returns and control moves to the beginning of the if statement, the variable named target will either contain null , (meaning that no collision was detected), or will contain a reference to thespider object involved in a collision.

If a collision was detected...

The body of the if statement shown in Listing 11 is executed if a collision was detected and the target variable does not contain null. In this case, the X component of the spider's position vector isincreased by a value of 128. This will cause the spider to move 128 pixels to the right the next time it is drawn.

<< Chapter < Page Page > Chapter >>

Read also:

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.
Jobilize.com uses cookies to ensure that you get the best experience. By continuing to use Jobilize.com web-site, you agree to the Terms of Use and Privacy Policy.