Опубликован: 07.11.2006 | Доступ: свободный | Студентов: 3400 / 338 | Оценка: 3.94 / 3.71 | Длительность: 37:11:00
Лекция 14:

Видеоданные

Выражение if просто проверяет, находится ли "головка воспроизведения" на или после кадра 2 и, если это так, позволяет осуществлять перемотку назад. Следующий фрагмент кода выполняется при отпускании кнопки мыши.

rewindMov.onRelease = function()  {
    rewindMov.onEnterFrame = undefined;
    if   (_currentframe  == 1) {
      state = "paused";
      playMov.gotoAndStop(1);
    } else {
      state = "playing";
      playMov.gotoAndStop(2);
    }
  };

Как и в случае с кодом перемотки вперед, данные сегменты будут вам знакомы. Основное отличие данного кода состоит в том, что в нем присутствует выражение if, обрабатывающее позицию головки воспроизведения и корректное state для кнопки воспроизведения/паузы. Если головка воспроизведения находится в кадре 1, тогда кнопка воспроизведения/паузы установлена на состояние state паузы, и отображается серый рисунок. В противном случае, кнопка воспроизведения/паузы установлена на воспроизведение и отображается кнопка паузы.

Действия завершаются кодом инициализации, который был построен на последнем фрагменте.

playMov.gotoAndStop (1);
  state = "paused";

Ниже приведен окончательный фильм в действии. Он будет находиться на сервере до момента вызова на главной странице.


Мы не включили его в окончательный фильм, однако существует другая потенциально возможная причина использования параметра _currentframe - простая полоса прокрутки фильма, которая есть во всех распространенных видеонадстройках и позволяющая быстро перематывать фильм на любое место видеофайла.


Если вы создали видеофильм, который был перетаскиваемым и закрепленным на оси x, вам будет легко сделать диапазон перетаскивания соответствующим кадрам видеоряда на временной шкале. Для этого можно использовать следующее выражение.

video_mc._currentframe = dragger_mc._x

Вам может понадобиться использовать немного математических выкладок, чтобы наибольший размер вашего диапазона перетаскивания имел то же значение, что и последний кадр вашего фильма, однако это все не должно быть слишком хитроумно.

Broadband Banthafodder

Мы уже рассматривали использование диаграмм состояния в предыдущей лекции, поэтому я не буду слишком сильно вдаваться в подробности. Тем не менее это актуально для нашего случая, так как мы собираемся работать с большим фильмом в данном параграфе - он создан для удаленных пользователей, которым, вероятно, хочется знать, сколько времени им придется ждать загрузки фильма.

Откройте исходный файл banthabroadband.fla. Вы увидите тот же фильм, над которым мы работали до сих пор, с внесенными в него соответствующими изменениями и новым слоем с именем progress bar.



Все содержимое кадра 1 каждого слоя расположено в пространстве до кадра 2, чтобы было место для строки отслеживания загрузки. В кадре 1 нового слоя progress bar есть простой символьный рисунок и код, реализующий действие - компонент ProgressBar. Этот компонент имеет имя инстанса progressBar и два графических параметра, что позволяет вам включать или выключать строку прогресса загрузки или текст. В данный момент мы не будем их рассматривать.

В кадре 1 слоя actions имеется следующий код функции progressBar.

Stop();
  progressBar.setLoadTarget(this);
  this.onEnterFrame = function () {
    if (progressBar.getPercentComplete() == 100) {
      this.onEnterFrame = undefined;
      this.gotoAndPlay (2);
    }
  };

Рассмотрим этот код по фрагментам, чтобы понять, какие действия он выполняет. За паузой на первом кадре следует строка кода, сообщающая progressBar о том, какой уровень или цель необходимо отслеживать. Так как этот фильм ограничен одной временной шкалой, строка прогресса была установлена на отслеживание this.

Чтобы предотвратить сложности при разработке сайта, старайтесь избегать использования _root.

В данном случае this означает всю локальную временную шкалу и, следовательно, все байты. Рассмотрим следующий фрагмент.

this.onEnterFrame = function () {
    if (progressBar.getPercentComplete()==100) {
      this.onEnterFrame = undefined;
      this.gotoAndPlay (2);
    }
  };

Первая строка кода устанавливает действие на выполнение в каждом кадре. После этого, выражение if проверяет, полностью ли загружен целевой объект (100%), присвоенный progressBar (а именно this, как указано в последнем фрагменте кода). Далее, метод getPercentComplete, наследованный от компонента, избавляет нас от большого количества вычислительной работы. Когда условие имеет значение "истина" (true), действие onEnterFrame очищается и головка воспроизведения отправляется на кадр 2.

Вот и все! Если вы сейчас запустите фильм, вы увидите тот же интерфейс и видеофильм, что и в последний раз, так как фильм загрузится моментально. Чтобы проверить работу индикатора загрузки, вам нужно будет протестировать файл в сети.

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

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

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

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

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