Дострочное пересдача экзамена
|
Адресация
Обращение к текущему фильму
Если скрипт находится на монтажном столе (например, в кадре или кнопке), и действия направлены на тот же монтажный стол, мы говорим, что целью действий этого скрипта является текущий фильм. Это все равно, что дать команду самому себе: например, если вы велите себе встать, можно сказать, что эта команда адресована "текущей" персоне – вам, поскольку вы даете команду и сами же выполняете ее. Если бы мы поместили в скрипт такое действие, получилось бы нечто вроде:
встать();
Как видите, в этом действии отсутствует адресация – потому что целью является текущий фильм. В конце концов, желая встать, вы ведь не обращаетесь к себе по имени, чтобы дать такую команду. Так же и во Flash: если путь в действии не указан, это значит, что действие направлено на тот монтажный стол, где и находится скрипт.
Другой способ адресовать действие текущему фильму – предварить действие ключевым словом this, например, так:
this.встать();
Можно перевести это на нормальный язык так: "С этим ( this ) монтажным столом выполнить следующее действие". Мы это еще обсудим во всех подробностях, пока же запомните следующее: во всех случаях при обращении к текущему фильму используются следующие взаимозаменяемые конструкции:
действие(); this.действие();
Ваш проект может содержать много скриптов (на разных монтажных столах), в которых отсутствует адресация. В таком случае каждый скрипт воздействует на свой монтажный стол (где он находится) – то есть на текущий фильм.
В следующем упражнении мы будем обращаться к текущему фильму при нескольких монтажных столах, используя конструкции без адресации и с ключевым словом this. Обе конструкции мы хотим использовать для того, чтобы вы привыкли к использованию this – поскольку, как вы узнаете в дальнейшем, это слово используется и для ссылок на текущий объект.
- Откройте файл currentTarget1.fla из папки Lesson03/Assets.
Этот проект состоит из единственной сцены с четырьмя слоями, названными в соответствии с их содержимым. Слой Background содержит четыре ключевых кадра: в каждом из них фон изображен разным цветом (вы можете убедиться в этом, подвигав курсор воспроизведения). Примерно в середине сцены имеется экземпляр фильма-символа, изображающий этакого "округлого" парня.
Первый скрипт, который мы напишем, будет содержать инструкции основному монтажному столу – он должен при начале воспроизведения перейти к случайно выбранному кадру (в результате мы получим случайно выбранный цвет фона). После этого мы поработаем с экземпляром фильма-символа, расположенным у нас в середине сцены: заставим его кое-что сделать, добавим несколько "братишек" и тоже их некоторым образом запрограммируем.
- Выделите кадр 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. В данном случае делать это было необязательно, это ничего не меняет.
- Сделайте двойной щелчок на экземпляре фильма-символа для редактирования его на месте.
В этом уроке нам предстоит выполнить еще несколько упражнений с монтажным столом этого фильма-символа, а потому давайте познакомимся с ним поближе.
На этом монтажном столе имеется две метки: Quiet и Speak. В кадре метке Speak появляется округлый контур для "произносимых" персонажем слов; внутри этого контура имеется текстовое поле с именем balloon. Вскоре мы создадим скрипт, отображающий, как только монтажный стол переместится к метке Speak, текст в этом поле.
Слой Button содержит невидимую кнопку, расположенную поверх остальных изображений на этом монтажном столе. Следующим нашим шагом будет написание скрипта для этой кнопки.
Наконец, в кадре 1 слоя Actions на этом монтажном столе содержится действие stop(), предотвращающее воспроизведение последующих кадров до получения особого указания.
- Выделите невидимую кнопку и введите в панели Действия такой скрипт:
on (press) { startDrag (this); gotoAndStop ("Speak"); balloon.text = words; } on (release) { stopDrag (); this.gotoAndStop ("Quiet"); }
Первый набор инструкций выполняется при нажатии на кнопку. Экземпляр фильма-символа становится перетаскиваемым. Далее, этот же монтажный стол отсылается к кадру с меткой Speak. И наконец, в текстовом поле balloon отображается значение переменной с именем words, мы создадим эту переменную вскоре – она будет содержать текстовую строку.
При отпускании кнопки перетаскивание прекращается и монтажный стол отправляется к метке Quiet.
- Вернитесь на основной монтажный стол. Открыв панель Библиотека (Library), перетащите на сцену еще пару экземпляров фильма-символа Hatfield. Выполните команду Управление > Проверить фильм (Control > Test Movie).
Первое, что вы заметите при проверке фильма – изменение цвета фона, ведь основной монтажный стол перешел к одному из кадров с 1 по 4, выбранному случайным образом.
Нажмите кнопку мыши на любом из экземпляров, и увидите, что при этом их можно перетаскивать, а рядом появляется контур для слов. Дело в том, что невидимая кнопка, к которой мы добавили скрипт, обеспечивающий эти функциональные возможности, является частью самого фильма-символа – оригинала. Значит, каждый экземпляр символа содержит эту кнопку, а та содержит скрипт. Скрипт, присоединенный к кнопке, воздействует на тот монтажный стол, частью которого является (текущий фильм). А поскольку каждый экземпляр является отдельным монтажным столом, перетаскиваемым становится только тот экземпляр, кнопка которого нажата в данный момент. Как видите, если действия помещены на монтажный стол фильма-символа или в кнопку внутри этого фильма-символа, а целью действий является текущий (собственный) монтажный стол, то запрограммированные функциональные возможности наследует каждый экземпляр этого фильма-символа. Можно сравнить это с генетической программой экземпляров – каждый обладает всеми свойствами, присущими оригиналу-родителю.
С помощью обработчиков событий клипа мы можем придать каждому экземпляру собственную индивидуальность, поверх "генетической" программы. Давайте попробуем.
- Закройте тестовое окно и вернитесь в среду разработки. Выделите один из трех экземпляров и введите в панели Действия такой скрипт:
onClipEvent (load) { words = "My name is Derek"; this._xscale = 75; _yscale = 75; }
Как вы узнали из предыдущего урока, обработчики событий клипа ( load, enterFrame, mouseMove и прочих) присоединяются к экземплярам фильмов-символов. Они позволяют запрограммировать действия, воздействующие только на один экземпляр фильма-символа. Таким образом, для программирования характеристик, уникальных для конкретного экземпляра фильма-символа, следует применять события клипа – вне монтажного стола фильма-символа; для программирования характеристик, общих для всех экземпляров фильма-символа, следует помещать скрипты внутрь монтажного стола фильма-символа (в кадр или кнопку в составе этого символа). И те, и другие действия указывают на текущий монтажный стол – но с разных точек зрения.
Используем метафору и рассмотрим эту концепцию применительно к людям. В этом случае все люди имеют некие общие характеристики (которые запрограммированы внутри монтажного стола фильма-символа) – органы чувств, строение тела, способность к мышлению – то, что мы унаследовали. С другой стороны, мы получаем и уникальные индивидуальные характеристики (программируемые вне монтажного стола фильма-символа), такие, как рост, имя, место жительства и тому подобное.
Приведенный выше скрипт выполняется при загрузке экземпляра, то есть при его появлении в фильме. Первое действие присваивает текстовое значение переменной words. После того, как будет выполнено это действие, эта переменная (ее имя и значение) будет храниться в этом экземпляре. Как вы помните, значение этой переменной используется для отображения текста в поле balloon, упомянутом в шаге 4. Два следующих действия масштабируют размер экземпляра до 75 процентов оригинального.
- Выделите один из двух других экземпляров и поместите в панель Действия такой скрипт:
onClipEvent (load) { words = "My name is Ashlie"; _x = 400; _y = 300; }
Скрипт очень похож на предыдущий, за исключением того, что переменной words присвоено другое значение – "My name is Ashlie", и вместо масштабирования при загрузке фильма-символа меняются его координаты: 400 пикселей по горизонтали и 300 по вертикали (отсчет от верхнего левого угла сцены).
- Выделите оставшийся экземпляр и поместите в панель Действия такой скрипт:
onClipEvent (load) { words = "My name is Kathy"; } onClipEvent (mouseMove) { this._rotation = this._rotation + .5; }
При загрузке этого экземпляра выполняется первое действие, присваивающее переменной words значение "My name is Kathy". Второй обработчик события при каждом перемещении мыши поворачивает экземпляр на полградуса.
- Выполните команду Управление > Проверить фильм (Control > Test Movie).
После загрузки тестового фильма вы увидите, что наши скрипты привели к некоторым изменениям. Первый экземпляр теперь меньше, чем другие два (75%), второй экземпляр сменил свои координаты, а третий экземпляр вращается при перемещении мыши. Нажмите любой из этих экземпляров – и убедитесь, что их можно перетаскивать, и у каждого экземпляра появляется овальный контур с текстом, который мы назначили каждому экземпляру. Еще раз повторим, что скрипт, помещенный внутрь фильма-символа, воздействует на все его экземпляры, а события клипа, присоединяемые к отдельным экземплярам, позволяют задать индивидуальные особенности.
- Выйдите из среды тестирования. Сохраните файл как currentTarget2.fla.
Мы будем работать с этим же проектом (слегка модифицированным) в следующем упражнении.