Recipe 11.16. Detecting Collisions (or Overlaps) Between Two Movie Clips


Problem

You want to be able to detect when two movie clips have collided or are overlapping.

Solution

Use the hitTest( ) method.

Discussion

There are plenty of reasons why you might want to detect whether two movie clips are overlapping. Here is a brief list of just a few examples:

  • Create collision effects whereby two movie clips bounce off of one another.

  • Create movie clips that cannot pass through other movie clips. An example of this would be the walls of a maze.

  • Detect overlaps between movies to switch the stacking orders.

You can detect when two movie clips are overlapping by using the hitTest( ) method. This method has two variations on its use. We'll look at the first one in this recipe.

The other variation is used primarily for more advanced collision detections, and you can read about it in the ActionScript Cookbook (O'Reilly, 2003).

The basic use of the hitTest( ) method involves passing the method a reference to the other movie clip instance with which you want to perform the test. Flash then performs a test between the movie clip instance from which the method is invoked and the movie clip instance you pass the method as a parameter.

 mOne.hitTest(mTwo);  

If the bounding boxes of the two movie clips overlap, the method returns true. Otherwise, the method returns false. It is important here to note that because the bounding boxes are used to perform the test, only rectangular movie clips can return completely accurate results. If the movie clip shapes are not perfectly rectangular, the results may sometimes be a little different from what you want. In most cases, the differences are not so drastic that it makes a big difference. If you need to perform more accurate collision tests, you should refer to the more advanced collision detection recipes in the ActionScript Cookbook (O'Reilly, 2003).

Because the hitTest( ) method returns a Boolean value, you usually use it in a conditional statement.

 if(mCircle.hitTest(mSquare)) {   trace("The circle and square are overlapping."); } 




Flash 8 Cookbook
Flash 8 Cookbook (Cookbooks (OReilly))
ISBN: 0596102402
EAN: 2147483647
Year: 2007
Pages: 336
Authors: Joey Lott

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net