检测冲突

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

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

可以使用 hitTest() 的参数来指定舞台上某个点击区域的 xy 坐标,或者使用另一个影片剪辑的目标路径作为点击区域。在指定 xy 时,如果由 (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. 把两个影片剪辑拖到舞台上,然后分别为它们指定实例名 cararea
  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()