检测冲突

MovieClip 类的 hitTest() 方法可以检测 SWF 文件中的冲突。它检查某个对象是否与影片剪辑有冲突,然后返回一个布尔值(true 或 false)。

在两种情况下,您想知道是否已经发生了冲突:一种情况是测试用户是否已经到达舞台上的某个特定静态区域,另一种情况是确定影片剪辑何时接触到另一个影片剪辑。利用 hitTest() 方法,可以判定这些结果。

可以使用 hitTest() 的参数来指定舞台上某个点击区域的 x 和 y 坐标,或者使用另一个影片剪辑的目标路径作为点击区域。在指定 x 和 y 时,如果由 (x, y) 标识的点是非透明点,那么
hitTest() 返回 true。当目标传递给 hitTest() 时,会对两个影片剪辑的边框进行比较。如果它们重叠,则 hitTest() 返回 true。如果两个边框没有相交,则 hitTest() 返回 false。

让鼠标指针滑过 SWF 文件中的形状来测试冲突。hitTest() 方法的结果会返回到文本字段中。

您也可以使用 hitTest() 来测试两个影片剪辑之间的冲突。

要测试冲突,则拖动汽车影片剪辑,使它接触停车区域影片剪辑。hitTest() 方法的结果会返回到文本字段中。

下面的步骤通过使用汽车示例介绍如何检测冲突。

在一个影片剪辑和舞台上的某一点之间执行冲突检测:

  1. 在舞台上创建一个新的影片剪辑,然后在属性检查器中输入 box 作为实例名称。
  2. 在舞台上创建一个动态文本框,然后在属性检查器中输入 status 作为实例名称。
  3. 在时间轴的图层 1 上选择第一个帧。
  4. 如果看不到“动作”面板,选择“窗口”>“开发面板”>“动作”将其打开。
  5. 在“动作”面板中添加以下代码:
    box.onEnterFrame = function () {
      status.text = this.hitTest(_xmouse, _ymouse, true);
    }
    
  6. 选择“控制”>“测试影片”,然后让鼠标滑过影片剪辑来测试冲突。

    只要鼠标位于不透明的像素上方,就会显示值 true。

执行两个影片剪辑之间的冲突检测:

  1. 把两个影片剪辑拖到舞台上,然后分别为它们指定实例名 car 和 area。
  2. 在舞台上创建一个动态文本框,然后在属性检查器中输入 status 作为实例名称。
  3. 在时间轴的图层 1 上选择第一个帧。
  4. 如果看不到“动作”面板,选择“窗口”>“开发面板”>“动作”将其打开。
  5. 在“动作”面板中输入下面的代码:
    area.onEnterFrame = function () {
      status.text=this.hitTest(car);
    }
    car.onPress = function (){
      this.startDrag(false);
      updateAfterEvent();
    }
    car.onRelease = function () {
      this.stopDrag();
    }
    
  6. 选择“控制”>“测试影片”,然后拖动影片剪辑以测试冲突检测。

    只要汽车边框与停车区域的边框发生相交,该状态就会变为 true。

有关更多信息,请参见MovieClip.hitTest()。