Опубликован: 04.11.2006 | Доступ: свободный | Студентов: 4621 / 581 | Оценка: 4.46 / 3.96 | Длительность: 39:17:00
Урок 6:

Создание и модификация объектов

Описание новых методов для встроенных объектов

В предыдущем упражнении вы узнали, как можно усовершенствовать существующий метод класса объектов MovieClip. Но что, если понадобится метод, совершенно не похожий на существующие? Создайте новый, свой собственный!

Как и при изменении существующих, тут подход тоже зависит от того, создается ли новый метод для встроенного объекта ( Mouse, Key, Math, Selection ) или класса объектов ( MovieClip, TextField и т.п.).

Чтобы создать новый метод для встроенного объекта (мы опять возьмем для примера объект Math) следует использовать такую синтаксическую конструкцию:

Math.totalWithTax = function(total, taxPercent){
  convertedPercent = taxPercent / 100;
  totalTax = total * convertedPercent;
  return total + totalTax;
}
trace(Math.totalWithTax(24.00, 6)); // Выводит результат: 25.44

Как видите, чтобы добавить метод (в данном случае – totalWithTax() ) к объекту Math, мы попросту присоединили к нему функцию. Теперь этот метод будет доступен в любом месте фильма. Таким же образом присоединяются новые методы и к другим встроенным объектам.

В следующем упражнении мы покажем, как добавить новый метод к классу встроенных объектов (для примера будет взят объект MovieClip, но описанный способ подойдет и для других встроенных классов). Метод, который мы создадим, будет переворачивать экземпляр фильма-символа относительно вертикальной или горизонтальной оси – такого встроенного метода в ActionScript не предусмотрено.

  1. Откройте objectProject3.fla из папки Lesson06/Assets.

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

  1. Откройте панель Действия, выделите кадр 1 и добавьте следующий скрипт после уже имеющегося:
MovieClip.prototype.flip = function(mode){
  if (mode.toLowerCase() == "h"){
    this._xscale = -this._xscale;
  }else if (mode.toLowerCase() == "v"){
    this._yscale = -this._yscale;
  }
}

Мы поместили этот скрипт в кадр 1, поэтому он будет выполнен сразу после начала воспроизведения фильма, и после этого метод flip(), добавленный нами в объект MoviClip.prototype будет доступен экземплярам фильмов-символов в любой момент. Как видите, этот метод – не что иное, как функция, принимающая единственный параметр под именем mode. Его значение может быть либо "h", либо "v" –указание на поворот по горизонтали или вертикали.

В зависимости от значения mode функция решает, как действовать – помогает ей в этом оператор if. В первой секции этого оператора значение mode преобразуется в нижний регистр (строчную букву), после чего сравнивается со значением "h". Если преобразованное значение mode равно "h", значит, нужно переворачивать по горизонтали. Делается это путем изменения знака текущего значения xscale (масштаб по x) данного экземпляра фильма-символа ( this ). То есть, если это значение равно 75, то будет –75; если оно равно –34, то будет 34. Обращение значения выполняется при помощи оператора "минус" (-). При таком использовании этот оператор превращает положительное число в отрицательное и наоборот. Таким вот образом масштабирование фильма-символа приспособлено для переворачивания.

Секция else вступает в дело, если mode имеет значение "v". В этом случае осуществляется вертикальный переворот – меняется на знак свойства yscale.

Примечание Преобразование значения mode в символ нижнего регистра мы предусмотрели на случай нечаянного ввода "H" или "V" вместо "h" и "v" – ведь "H" не равно "h". Такое преобразование помогает снизить вероятность ошибки при использовании нового метода.

  1. Выделите кнопку в виде стрелки вверх-вниз (ту, что расположена левее) и присоедините к ней скрипт:
on(release){
  smallHead.flip("v");
}

При нажатии этой кнопки экземпляр smallHead будет переворачиваться по вертикали.

  1. Выделите кнопку в виде стрелки влево-вправо (ту, что расположена левее) и присоедините к ней скрипт:
on(release){
  smallHead.flip("h");
}

Это будет переворачивать экземпляр smallHead по горизонтали.

  1. Присоедините к кнопкам в виде двойных стрелок (расположенным правее) скрипты из двух предыдущих шагов, заменив smallHead на bigHead.
  1. Командой Управление > Проверить фильм (Control > Test Movie) запустите тест проекта.

При нажатии на какую-либо из этих кнопок тот или иной экземпляр фильма-символа будет переворачиваться по горизонтали или вертикали.


Это был простой пример того, как можно создать свой метод для встроенного класса объектов. Таким же способом вы можете создавать объекты для прочих классов (таких, как TextField, Sound, Color, XML и т.п.).

  1. Закройте тестовый фильм и сохраните свою работу как objectProject4.fla.

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

Совет Отличный сетевой ресурс, содержащий новые и усовершенствованные методы ActionScript, вы найдете по адресу http://www.layer51.com/proto/.

Совет Вы можете создать собственную библиотеку дополнительных методов (а также и классов), написав нужный код в стандартном текстовом редакторе и сохранив файл с расширением .as – что-нибудь вроде CustomScript.as – файлы с таким расширением Flash воспринимает как содержащие код ActionScript. Впоследствии, когда вам понадобится воспользоваться своими классами или методами, вам просто нужно будет поместить в кадр 1 вашего фильма действие #include, указав имя файла, который следует включить в программу (например, #include "CustomScript.as" ). Это действие автоматически импортирует и вставляет код из .as файла в то место программы, где находится действие #include. Таких .as файлов, содержащих код для повторного использования, вы можете создать сколько угодно.

Салтанат Бектегенова
Салтанат Бектегенова

Дострочное пересдача экзамена

 

Евгений Стародубцев
Евгений Стародубцев

Вот задание:

7. Открыв панель Действия (Actions) и установив ее в Экспертный режим(Expert Mode), выделите кадр 1 слоя Actions и введите следующий скрипт: