Опубликован: 07.11.2006 | Уровень: специалист | Доступ: платный
Лекция 8:

Обнаружение коллизий

Использование различных типов hitTest

  1. Откройте новый основной фильм и создайте в нем два фильма с именами movieClip1 и movieClip2. Придайте обоим фильмам неправильную форму и назовите их инстансы именами movieClip1_mc и movieClip2_mc соответственно.
  2. Мы будем использовать проверку по двум фильмам, поэтому введите следующий код в кадре 1 нового слоя с именем actions.
    movieClipl_mc.onEnterFrame = function() {
      if (this.hitTest(movieClip2_mc)) {
        trace("hit");
      }
    };
    movieClip2_mc.onEnterFrame = function() {
      this._x = _xmouse;
      this._y = _ymouse;
    };
  3. Запустите ваш фильм и начните перетаскивать movieClip2. Вы увидите результат каждой проверки в окне Output.

  4. Закройте тестовый фильм. Теперь мы попробуем использовать проверку "фильм-точка" без shapeFlag, поэтому просто замените имеющийся код из шага 2 следующим кодом.
    movieClipl_mc.onEnterFrame = function() {
      if (this.hitTest(movieClip2_mc._x, movieClip2_mc._y, false)) {
       trace("hit");
      }
     };
     movieClip2_mc.onEnterFrame = function() {
      this._x = _xmouse;
      this._y = _ymouse;
     };
  5. Чтобы было лучше видно, где Flash регистрирует столкновение, удалите заливку из movieClip2, чтобы остался только контур. Теперь проверьте ваш фильм.

    Cтолкновение не регистрируется до тех пор, пока курсор не войдет (хотя он не виден) в граничную рамку вокруг movieClip1.

  6. Закройте тестовый фильм. Наконец, попытаемся использовать проверку "фильм-точка", но уже с использованием shapeFlag. Замените весь имеющийся код в кадре 1 следующим кодом.
    movieClip1_mc .onEnterFrame = function () {
      if (this.hitTest(movieClip2_mc._x, movieClip2_mc._y, true)) {
       trace("hit");
      }
     };
     movieClip2_mc.onEnterFrame = function() {
      this._x = _xmouse;
      this._y = _ymouse;
     };
  7. Запустите ваш фильм. Перетаскивайте movieClip2 в разные места мышью и наблюдайте за происходящими столкновениями в окне Output.

    Эксперименты с каждым и этих методов дадут вам представление о работе каждого из них, а также о том, какой именно метод нужно использовать в той или иной ситуации.

Игорь Хан
Игорь Хан

у меня аналогичная ситуация. Однако, если взять пример из приложения (ball_motion_04_click for trial.fla) то след остается. при этом заметил, что в моем проекте в поле "One item in library" виден кружок, в то время как в приложенном примере такого кружка нет.

Вопрос знатокам, что не так?

Александр Коргапольцев
Александр Коргапольцев

объект созданый мной упорно не желает оставлять след(единственное что добился, так это то что шарик резво гоняется за курсором) функция duplicateMovieClip остаётся не активной, т.е. следа от объекта не остаётся, но если я тоже самый код вбиваю в учебный файл всё работает, не могу понять где я ошибаюсь и почему в документе созданном заново, не работает код начиная от функции duplicateMovieClip? 

Тамара Ионова
Тамара Ионова
Россия, Нижний Новгород, НГПУ, 2009
Магомед Алисултанов
Магомед Алисултанов
Россия, Волгоград, лицей 2