Опубликован: 04.11.2006 | Уровень: специалист | Доступ: платный
Урок 3:

Адресация

< Урок 2 || Урок 3: 1234567 || Урок 4 >

Обращение к текущему фильму

Если скрипт находится на монтажном столе (например, в кадре или кнопке), и действия направлены на тот же монтажный стол, мы говорим, что целью действий этого скрипта является текущий фильм. Это все равно, что дать команду самому себе: например, если вы велите себе встать, можно сказать, что эта команда адресована "текущей" персоне – вам, поскольку вы даете команду и сами же выполняете ее. Если бы мы поместили в скрипт такое действие, получилось бы нечто вроде:

встать();

Как видите, в этом действии отсутствует адресация – потому что целью является текущий фильм. В конце концов, желая встать, вы ведь не обращаетесь к себе по имени, чтобы дать такую команду. Так же и во Flash: если путь в действии не указан, это значит, что действие направлено на тот монтажный стол, где и находится скрипт.

Другой способ адресовать действие текущему фильму – предварить действие ключевым словом this, например, так:

this.встать();

Можно перевести это на нормальный язык так: "С этим ( this ) монтажным столом выполнить следующее действие". Мы это еще обсудим во всех подробностях, пока же запомните следующее: во всех случаях при обращении к текущему фильму используются следующие взаимозаменяемые конструкции:

действие();
this.действие();

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

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

  1. Откройте файл currentTarget1.fla из папки Lesson03/Assets.

Этот проект состоит из единственной сцены с четырьмя слоями, названными в соответствии с их содержимым. Слой Background содержит четыре ключевых кадра: в каждом из них фон изображен разным цветом (вы можете убедиться в этом, подвигав курсор воспроизведения). Примерно в середине сцены имеется экземпляр фильма-символа, изображающий этакого "округлого" парня.


Первый скрипт, который мы напишем, будет содержать инструкции основному монтажному столу – он должен при начале воспроизведения перейти к случайно выбранному кадру (в результате мы получим случайно выбранный цвет фона). После этого мы поработаем с экземпляром фильма-символа, расположенным у нас в середине сцены: заставим его кое-что сделать, добавим несколько "братишек" и тоже их некоторым образом запрограммируем.

  1. Выделите кадр 1 основного монтажного стола и добавьте к нему следующий скрипт:
startingColor = random (4) + 1;
this.gotoAndStop (this.startingColor);

Первым делом позаботьтесь, чтобы был выделен кадр 1 основного монтажного стола – таким образом текущим фильмом для нашего скрипта станет главный монтажный стол. Значит, все действия, которые мы введем в панели Действия без адресации (или с адресацией this ), будут воздействовать на этот монтажный стол.

Первое действие генерирует случайное число в диапазоне от 1 до 4 и присваивает его значение переменной startingColor. Функция random(4) генерирует случайное целое число из четырех возможных, причем это множество всегда начинается с нуля – в нашем случае это 0, 1, 2 и 3. Прибавляя к результату функции единицу, мы получим число из множества 1, 2, 3 и 4 – это будет именно то, что нам нужно, ведь в следующем действии мы приказываем фильму перейти к кадру, номер которого содержит переменная startingColor, а кадра с номером 0 на монтажных столах быть не может. Итак, в результате этих действий при начале проигрывания фон на экране отображается одним из четырех цветов, выбранным случайно.

Заметьте: присваивая значение переменной startingColor, мы не указываем путь; однако в следующем действии присоединяем к имени переменной слово this. В данном случае делать это было необязательно, это ничего не меняет.

  1. Сделайте двойной щелчок на экземпляре фильма-символа для редактирования его на месте.

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

На этом монтажном столе имеется две метки: Quiet и Speak. В кадре метке Speak появляется округлый контур для "произносимых" персонажем слов; внутри этого контура имеется текстовое поле с именем balloon. Вскоре мы создадим скрипт, отображающий, как только монтажный стол переместится к метке Speak, текст в этом поле.


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

Наконец, в кадре 1 слоя Actions на этом монтажном столе содержится действие stop(), предотвращающее воспроизведение последующих кадров до получения особого указания.

  1. Выделите невидимую кнопку и введите в панели Действия такой скрипт:
on (press) {
  startDrag (this);
  gotoAndStop ("Speak");
  balloon.text = words;
}
on (release) {
  stopDrag ();
  this.gotoAndStop ("Quiet");
}

Первый набор инструкций выполняется при нажатии на кнопку. Экземпляр фильма-символа становится перетаскиваемым. Далее, этот же монтажный стол отсылается к кадру с меткой Speak. И наконец, в текстовом поле balloon отображается значение переменной с именем words, мы создадим эту переменную вскоре – она будет содержать текстовую строку.

При отпускании кнопки перетаскивание прекращается и монтажный стол отправляется к метке Quiet.

  1. Вернитесь на основной монтажный стол. Открыв панель Библиотека (Library), перетащите на сцену еще пару экземпляров фильма-символа Hatfield. Выполните команду Управление > Проверить фильм (Control > Test Movie).

Первое, что вы заметите при проверке фильма – изменение цвета фона, ведь основной монтажный стол перешел к одному из кадров с 1 по 4, выбранному случайным образом.

Нажмите кнопку мыши на любом из экземпляров, и увидите, что при этом их можно перетаскивать, а рядом появляется контур для слов. Дело в том, что невидимая кнопка, к которой мы добавили скрипт, обеспечивающий эти функциональные возможности, является частью самого фильма-символа – оригинала. Значит, каждый экземпляр символа содержит эту кнопку, а та содержит скрипт. Скрипт, присоединенный к кнопке, воздействует на тот монтажный стол, частью которого является (текущий фильм). А поскольку каждый экземпляр является отдельным монтажным столом, перетаскиваемым становится только тот экземпляр, кнопка которого нажата в данный момент. Как видите, если действия помещены на монтажный стол фильма-символа или в кнопку внутри этого фильма-символа, а целью действий является текущий (собственный) монтажный стол, то запрограммированные функциональные возможности наследует каждый экземпляр этого фильма-символа. Можно сравнить это с генетической программой экземпляров – каждый обладает всеми свойствами, присущими оригиналу-родителю.

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

  1. Закройте тестовое окно и вернитесь в среду разработки. Выделите один из трех экземпляров и введите в панели Действия такой скрипт:
onClipEvent (load) {
  words = "My name is Derek";
  this._xscale = 75;
  _yscale = 75;
}

Как вы узнали из предыдущего урока, обработчики событий клипа ( load, enterFrame, mouseMove и прочих) присоединяются к экземплярам фильмов-символов. Они позволяют запрограммировать действия, воздействующие только на один экземпляр фильма-символа. Таким образом, для программирования характеристик, уникальных для конкретного экземпляра фильма-символа, следует применять события клипа – вне монтажного стола фильма-символа; для программирования характеристик, общих для всех экземпляров фильма-символа, следует помещать скрипты внутрь монтажного стола фильма-символа (в кадр или кнопку в составе этого символа). И те, и другие действия указывают на текущий монтажный стол – но с разных точек зрения.

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

Приведенный выше скрипт выполняется при загрузке экземпляра, то есть при его появлении в фильме. Первое действие присваивает текстовое значение переменной words. После того, как будет выполнено это действие, эта переменная (ее имя и значение) будет храниться в этом экземпляре. Как вы помните, значение этой переменной используется для отображения текста в поле balloon, упомянутом в шаге 4. Два следующих действия масштабируют размер экземпляра до 75 процентов оригинального.

  1. Выделите один из двух других экземпляров и поместите в панель Действия такой скрипт:
onClipEvent (load) {
  words = "My name is Ashlie";
  _x = 400;
  _y = 300;
}

Скрипт очень похож на предыдущий, за исключением того, что переменной words присвоено другое значение – "My name is Ashlie", и вместо масштабирования при загрузке фильма-символа меняются его координаты: 400 пикселей по горизонтали и 300 по вертикали (отсчет от верхнего левого угла сцены).

  1. Выделите оставшийся экземпляр и поместите в панель Действия такой скрипт:
onClipEvent (load) {
  words = "My name is Kathy";
}
onClipEvent (mouseMove) {
  this._rotation = this._rotation + .5;
}

При загрузке этого экземпляра выполняется первое действие, присваивающее переменной words значение "My name is Kathy". Второй обработчик события при каждом перемещении мыши поворачивает экземпляр на полградуса.

  1. Выполните команду Управление > Проверить фильм (Control > Test Movie).

После загрузки тестового фильма вы увидите, что наши скрипты привели к некоторым изменениям. Первый экземпляр теперь меньше, чем другие два (75%), второй экземпляр сменил свои координаты, а третий экземпляр вращается при перемещении мыши. Нажмите любой из этих экземпляров – и убедитесь, что их можно перетаскивать, и у каждого экземпляра появляется овальный контур с текстом, который мы назначили каждому экземпляру. Еще раз повторим, что скрипт, помещенный внутрь фильма-символа, воздействует на все его экземпляры, а события клипа, присоединяемые к отдельным экземплярам, позволяют задать индивидуальные особенности.

  1. Выйдите из среды тестирования. Сохраните файл как currentTarget2.fla.

Мы будем работать с этим же проектом (слегка модифицированным) в следующем упражнении.

< Урок 2 || Урок 3: 1234567 || Урок 4 >
Салтанат Бектегенова
Салтанат Бектегенова

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

 

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

Вот задание:

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

Евгения Дегтяренко
Евгения Дегтяренко
Украина, Запорожье
Анна Елисеева
Анна Елисеева
Россия, Великий Новгород, Ногородский государственный университет имени Ярослава Мудрого, 2003