Мы вносим некоторые изменения в Activetuts +. Отныне наши учебники будут по возможности использовать код на основе классов вместо кода временной шкалы. Этот краткий совет объясняет, что вам нужно знать.
Зачем использовать файлы классов?
Я признаю это — иногда, кодирование полностью на временной шкале полезно. Это быстрый способ проверить эффект и самый простой способ синхронизировать действия с конкретными кадрами анимации.
Но для любого проекта, который больше полагается на код, чем на анимацию, существуют серьезные недостатки. Весь ваш ActionScript находится внутри файла FLA; Вы не можете разделить программирование между разными разработчиками, вам нужно скопировать и вставить код, если вы хотите использовать его повторно, и вы вынуждены использовать панель действий Flash.
Использование файлов классов освобождает ваш код. И это действительно не сложнее, чем кодирование на временной шкале; это просто включает в себя немного больше настроек. Я расскажу вам, как создать проект Flash, использующий классы, а затем подробно расскажу о файле классов.
(Одна из причин, по которой мы переключаемся на классы, состоит в том, чтобы облегчить разработчикам AS3, которые не используют Flash, следовать нашим учебным пособиям. Если вы один из них, я думаю, вы уже привыкли иметь дело с классами , но вы всегда можете прочитать этот краткий совет для повышения квалификации — просто проигнорируйте немного о Flash!)
Шаг 1: Создайте FLA
Я уверен, что вы уже знаете, как это сделать. Откройте Flash и выберите « Файл»> «Создать … Flash-файл» (ActionScript 3.0) . Сохраните это где хотите. Я назвал свой Example.fla , но неважно, какое имя вы выберете.
Шаг 2. Создание файла ActionScript
Нажмите Файл> Создать … Файл ActionScript . Сохраните это как Main.as в той же папке, что и ваш FLA.
В этот файл мы собираемся поместить код, который приводит в действие сам FLA, но как Flash узнает, как его найти?
Шаг 3: Свяжите FLA с файлом AS
Вы можете иметь десятки AS-файлов в той же папке, что и FLA, поэтому Flash не захочет угадать, какой из них использовать. Мы должны будем сказать это.
Переключитесь на инструмент «Выделение» (ярлык: V), затем убедитесь, что ничего не выделено (нажмите Ctrl-Shift-A). Откройте панель «Свойства» (« Окно»> «Свойства»).
Если вы используете Flash CS3, это будет выглядеть так:
Введите Main в поле с надписью «Класс документа» — это соответствует имени вашего файла ActionScript за вычетом расширения «.as».
Если вы используете Flash CS4, это будет выглядеть так:
В этом случае вам необходимо ввести Main в поле с надписью «Class». По какой-то причине Adobe отбросила бит «Документ».
Шаг 4: (Необязательно) Реорганизовать структуру папок
Вам не нужно хранить все ваши файлы в одном каталоге. Посмотрите эту скринкаст «Быстрый совет», если вы хотите знать, как двигаться дальше.
Шаг 5: Напишите свой класс документов
Откройте файл Main.as и вставьте следующий код:
01
02
03
04
05
06
07
08
09
10
11
|
package
{
import flash.display.MovieClip;
public class Main extends MovieClip
{
public function Main()
{
}
}
}
|
Это базовый пустой класс документа. Это наименьшее количество кода, которое мы можем написать, которое на самом деле будет работать. Позвольте мне сломать это:
Ключевое слово package сообщает Flash, что весь код между его фигурными скобками является частью одной группы.
Написание класса Main также группирует код, но по-другому. Классы содержат функции и переменные; пакеты содержат классы и операторы импорта.
Примечание: вы должны дать вашему классу то же имя, что и файл AS: Main .
А как насчет публики ? Ну, это просто означает, что другие классы в вашем коде смогут видеть этот класс.
Этот класс Main будет питать наш FLA. По умолчанию наш FLA — это мувиклип (он имеет временную шкалу).
Мы хотим, чтобы Main мог делать все, что может сделать фрагмент ролика, а также больше, основываясь на коде, который мы пишем. Другими словами, мы хотим расширить функциональность обычного мувиклипа .
(Иногда нам может не потребоваться выполнять анимацию на основной временной шкале сцены; в этом случае нам не нужно расширять MovieClip, а вместо этого мы можем просто расширить Sprite. Сам MovieClip расширяет Sprite, но добавляет дополнительные функции для анимации, как функция nextFrame () . Так что, если вы не уверены, стоит ли расширять MovieClip или Sprite, используйте MovieClip — это безопаснее!)
MovieClip сам по себе класс.
Flash не отслеживает автоматически, где хранятся все файлы классов; для того, чтобы наш код MovieClip расширялся , нам нужно указать Flash, где найти класс MovieClip. Это то, что делает строка импорта .
Операторы импорта всегда идут внутри пакета и вне класса, вверху.
Каждый класс содержит функцию с тем же именем, что и класс. Это называется функцией конструктора .
Весь код внутри этой функции запускается при создании объекта этого типа класса — в нашем случае код между этими фигурными скобками будет выполняться при загрузке SWF.
Не волнуйтесь, если вы чувствуете, что еще не совсем поняли все это. Как только вы начнете использовать классы и писать свои собственные, все встанет на свои места.
Шаг 6: Заставь это сделать
Как я уже говорил на шаге 5, функция конструктора содержит самый первый код, который запускается при загрузке SWF. Итак, давайте добавим что-то, чтобы убедиться, что все работает:
01
02
03
04
05
06
07
08
09
10
11
|
package
{
import flash.display.MovieClip;
public class Main extends MovieClip
{
public function Main()
{
trace( «Yep, it’s working» );
}
}
}
|
Линия 8 — единственная новая там. Проверьте свой SWF обычным способом (« Управление»> «Тестировать ролик» ). Если все хорошо, вы должны увидеть всплывающее окно «Да, это работает» на панели «Вывод». Если не…
- Вы сохранили внесенные изменения в Main.as?
- Установлен ли класс документов вашего FLA на Main ?
- Вы определенно тестируете фильм Example.fla?
Если ни один из этих вопросов не помог, пожалуйста, оставьте комментарий.
Шаг 7: попробуйте что-нибудь более сложное
Попробуйте заменить код Main.as следующим:
01
02
03
04
05
06
07
08
09
10
11
12
|
package
{
import flash.display.MovieClip;
public class Main extends MovieClip
{
public function Main()
{
var greeting:String = «Hello»;
trace( greeting );
}
}
}
|
Просто, правда? Мы только что создали новую переменную String внутри функции конструктора. Теперь давайте добавим новую функцию:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
package
{
import flash.display.MovieClip;
public class Main extends MovieClip
{
public function Main()
{
var greeting:String = «Hello»;
changeGreetingToFrench();
trace( greeting );
}
public function changeGreetingToFrench():void
{
greeting = «Bonjour»;
}
}
}
|
Здесь есть несколько вещей, на которые стоит обратить внимание.
Во-первых, новая функция идет внутри класса, а после конструктора — по договоренности, конструктор является первой функцией в классе.
Во-вторых, новая функция является публичной ; при кодировании внутри класса (а не на временной шкале) рекомендуется помещать «public» (или «private» или «protected», но я оставлю их для другого поста) в начале строки, определяющей функцию , Это просто способ сообщить другим классам, могут ли они получить к нему доступ.
В-третьих, определение новой функции заканчивается : void . Это просто означает, что не возвращает значение. Функции конструктора не нуждаются в : void, потому что они не могут возвращать значение.
Если вы протестируете этот фильм, вы получите сообщение об ошибке:
Main.as, строка 15: 1120: доступ к неопределенному приветствию свойства.
Когда вы создаете переменную внутри функции, другие функции не могут получить к ней доступ. Если вы хотите, чтобы каждая функция в классе могла иметь доступ к переменной, вам нужно объявить ее внутри класса, но вне всех функций:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
package
{
import flash.display.MovieClip;
public class Main extends MovieClip
{
public var greeting:String = «Hello»;
public function Main()
{
changeGreetingToFrench();
trace( greeting );
}
public function changeGreetingToFrench():void
{
greeting = «Bonjour»;
}
}
}
|
Как и в случае с функциями, если вы объявляете переменную вне функции, вам нужно начинать ее с «public» (или «private» или «protected»). В отличие от функций, переменные должны быть определены над конструктором.
Протестируйте свой фильм сейчас, и вы, наконец, должны получить хорошее приветствие на французском языке. Как полезно!
Завершение
Таким образом, это не совсем впечатляющий результат, но, надеюсь, вы теперь чувствуете, что можете следовать учебникам, которые не пишутся на временной шкале.
Я действительно хочу убедиться, что все понимают, как использовать класс документа, поэтому, если что-то из этого было непонятно, пожалуйста, оставьте примечание в комментариях. Как только мы разберемся с путаницей, я отредактирую Быстрый совет, чтобы облегчить понимание следующему человеку. Благодарность 🙂