Detecting collisions

The hitTest() method of the MovieClip class detects collisions in a SWF file. It checks to see if an object has collided with a movie clip and returns a Boolean value (true or false).

There are two cases in which you would want to know whether a collision has occurred: to test if the user has arrived at a certain static area on the Stage, and to determine when one movie clip has reached another. With hitTest(), you can determine these results.

You can use the parameters of hitTest() to specify the x and y coordinates of a hit area on the Stage, or use the target path of another movie clip as a hit area. When specifying x and y, hitTest() returns true if the point identified by (x, y) is a nontransparent point. When a target is passed to hitTest(), the bounding boxes of the two movie clips are compared. If they overlap, hitTest() returns true. If the two boxes do not intersect, hitTest() returns false.

Move the mouse pointer over the shape in the SWF file to test the collision. The results of the hitTest() method are returned in the text field.

You can also use hitTest() to test a collision between two movie clips.

To test the collision, drag the car movie clip so that it touches the parking area movie clip. The results of the hitTest() method are returned in the text field.

The following procedures show how to detect collision using the car example.

To perform collision detection between a movie clip and a point on the Stage:

  1. Create a new movie clip on the Stage, and enter box as the instance name in the Property inspector.
  2. Create a dynamic text box on the Stage, and enter status as the instance name in the Property inspector.
  3. Select the first frame on Layer 1 in the Timeline.
  4. Select Window > Development Panels > Actions to open the Actions panel, if it is not already visible.
  5. Add the following code in the Actions panel:
    box.onEnterFrame = function () {
      status.text = this.hitTest(_xmouse, _ymouse, true);
    }
    
  6. Select Control > Test Movie, and move the mouse over the movie clip to test the collision.

    The value true is displayed whenever the mouse is over a nontransparent pixel.

To perform collision detection on two movie clips:

  1. Drag two movie clips to the Stage, and give them the instance names car and area.
  2. Create a dynamic text box on the Stage, and enter status as the instance name in the Property inspector.
  3. Select the first frame on Layer 1 in the Timeline.
  4. Select Window > Development Panels > Actions to open the Actions panel, if it is not already visible.
  5. Enter the following code in the Actions panel:
    area.onEnterFrame = function () {
      status.text=this.hitTest(car);
    }
    car.onPress = function (){
      this.startDrag(false);
      updateAfterEvent();
    }
    car.onRelease = function () {
      this.stopDrag();
    }
    
  6. Select Control > Test Movie, and drag the movie clip to test the collision detection.

    Whenever the bounding box of the car intersects the bounding box of the area, the status is true.

For more information, see MovieClip.hitTest().