Советы изучающим ActionScript 3.0
ActionScript 3.0 - это мощный объектно-ориентированный язык, который представляет собой новую модель программирования для Flash Player. Если вы уже знакомы с ActionScript 1.0 или 2.0, вы должны учитывать некоторые языковые различия, для того чтобы начать разработку вашего первого приложения с помощью ActionScript 3.0.
Для того чтобы облегчить переход к ActionScript 3.0, давайте рассмотрим следующий перечень советов и общих проблем, возникающих в ходе разработки.
-
Объявляйте типы для всех переменных, параметров и возвращаемых значений.Объявление типа для всех переменных, параметров и возвращаемых значений не требуется, однако такая практика считается наилучшей. Это может помочь при компиляции - сообщения об ошибках будут более внятными. А также на этапе исполнения, поскольку виртуальная машина будет знать с какими типами данных вы работаете наперед.
-
Обратите внимание на то, что объявления, не имеющие указателей доступа теперь по умолчанию указывает на
package internal, а не наpublic.По умолчанию указатель доступа для объявлений теперь внутренний вместо публичного. То есть определения видны только внутри пакета, содержащего определение, а не во всем коде. Это согласуется с другими языками, такими как Java. -
Заметим, что классы являются закрытыми по умолчанию, то есть свойства не могут быть добавлены динамически во время выполнения. Классы теперь могут быть динамическими или закрытыми..Динамические классы могут добавлять динамические свойства во время выполнения; Закрытые классы не могут. Закрытые классы экономят использование памяти, поскольку в них не создается внутренняя хеш таблица для хранения динамических свойств, и компилятор может лучше отследить ошибки. Объявление
class Foo- закрытое. Чтобы объявить динамический класс, используется ключевое словоdynamic. Напримерdynamic class Foo. -
Используйте ключевое слово
packageдля определения пакета класса.Ключевое слово
packageявляется новым для ActionScript 3.0.ActionScript 2.0 код:
class mx.controls.Button { ... }ActionScript 3.0 код:
package mx.controls { class Button { ... } }Как и в ActionScript 2.0, публичные классы должны быть в файле с тем же именем, что и класс. Несколько классов могут быть объявлены в одном файле, но только один класс может быть публичным, и его имя должно совпадать с именем файла.
-
Производите импорт классов, даже если в их объявлении используется полная ссылка.
Для использования класса
MyPackage.MyClass, необходимо импортировать его:import MyPackage.MyClass;
Так правильнее, даже если ссылки полные, то есть использется полное имя MyPackage.MyClass. В ActionScript 3.0 объявление
importсвидетельствует о том, что вы хотите использовать класс из другого пакета, тогда как в ActionScript 2.0 только для сокращения имен. В ActionScript 3.0, полное имя класса используется, но не является заменой дляimport. Кроме того, можно импортировать все определения пакета с помощью символов подстановки *:import MyPackage.*;
Считается, что лучше всего импортировать определения индивидуально, так как это приводит к меньшим неясностям относительно определений, которые использует Ваш код.
-
Всегда помечайте переопределяющие (override) методы.Ключевое слово
overrideпомогает избежать общих ошибок методов переопределения. Это так же облегчает прочтение кода - сразу видно какой метод в настоящее время был переопределен. Потому что зная, что метод предназначен для переопределения другого, компилятор может выполнять более точную проверку. Ключевое словоoverrideв ActionScript 3.0 привнесено из C#. -
Объявляйте тип данных, возвращаемых функцией.Объявление типа возвращаемых функцией данных яляется хорошей практикой. Если не объявить тип возвращаемых данных, компилятор выдаст предупреждение. Это делается из соображений безопасности. Если функция не возвращает никаких данных, объявите возвращаемый тип как
void. -
Заметим, что делегирование теперь встроено в язык, тем самым создавать и отслеживать события стало легче.
В ActionScript 2.0, передача события методу требует использования класса
mx.utils.Delegateили иных решений:import mx.utils.Delegate; myButton.addEventListener("click", Delegate.create(this, onClick));В ActionScript 3.0, ссылка на метод автоматически запомнит экземпляр объекта, из которого она была извлечана. Это называется закрытие метода. Таким образом, код может быть таким:
myButton.addEventListener("click", onClick); -
Используйте опции
-verbose-stacktracesи-debug.Компиляция с опциями-verbose-stacktracesи-debugдает возможность увидеть имена файлов и номера строк во время выполнения в Flash Player при возникновении ошибки. При возникновении ошибки на этапе выполнения диалоговое окно описывает ошибку и выводит стэк вызовов. Использование данных опций поможет быстрее локализовать источник ошибки в коде. -
Явно объявляйте свойства, предназначенные для связывания (bindable).Свойства больше не являются связанными по умолчанию. Вы должны объявлять их как связанные с помощью тега метаданных
[Bindable]. -
Заметим, что Flash Player API был реорганизован в пакеты.Раньше все классы и функции в Flash Player API были глобальными. Сейчас существует множество пакетов, таких как flash.display, flash.events, flash.ui и так далее. Например,
MovieClipсейчасflash.display.MovieClip, аgetTimerиsetIntervalбыли помещены в пакетеflash.utils. -
Используйте новый класс Timer вместо setInterval / setTimeout.Новый класс
Timerобеспечивает более чистый механизм событий времени, чем функцииsetInterval иsetTimeout. Новый класс Timer имеет ряд преимуществ по сравнению с setInterval, а также более современный объектно-ориентированный интерфейс. -
Будьте уверены в подклассе событий
Event.События теперь строго типизированы, и должны быть подклассами нового базового классаEvent. Новый класс Event делает систему событий более четким и эффективным. Вместо использования общего классаObjectтеперь необходимо использовать классEvent(напримерdispatchEvent(new Event ('myCustomEventType'))). -
Заметим, что визуальные элементы должны расширять класс
DisplayObject, вы можете определять их, как и любой другой класс.Компоненты теперь сделаны динамическими и добавляются на сцену с помощью addChild. Визуальные объекты, в том числеTextField, могут быть инстанцированы как и любой другой объект, и просто добавляются в список отображения (display list) с помощьюaddChildилиaddChildAt. В связи с этим исчезли некоторые функции API, такие какcreateEmptyMovieClipиcreateTextField. Чтобы создавать текстовое поле нужно использоватьnew textFiledвместо вместоcreateTextField. -
Заметим, что для манипулирования XML во Flash теперь рекомендуется использовать E4X (ECMAScript для XML).E4X является гораздо более мощным и лучше интегрированым в язык, чем класс XML, и предоставляет множество новых возможностей. Класс XML по-прежнему доступен для использования. Теперь этот класс переименован в
XMLDocumentи доступен в пакетеflash.xml. -
Используйте метод
toXMLStringпри использовании E4X.МетодtoStringне всегда возвращает полную XML разметку для объекта. Для получения полной разметки используйте методtoXMLString. Дело в том, что методtoStringне всегда сериализует XML объект полностью. -
Заметим, что цикл
for...inбольше не будет перечислять свойства и методы объявленные в классе.Он лишь перечисляет динамические свойства объекта. В ActionScript 3.0 имеется новый и более продвинутой механизм интроспекции (перечисления параметров) объекта, называемыйdescribeType. -
Заметим, что корневым объектом SWF файлов теперь может быть экземпляр любого пользовательского класса на ваш выбор.В ActionScript 2.0, корневой объект SWF файлов всегда принадлежал классу
MovieClip. В ActionScript 3.0, он может быть любым подклассом Sprite. Можно задать класс для определенияDocumentRootSWF файла. Когда он будет загружен, SWF файл будет использовать экземпляр этого класса в качестве корневого объекта.
Продолжение следует...
Коммент
Здравствуй. Меня зовут Сергей. После долгого серфа по Яндексу набрел на твой блог. Решил написать, так как судя по твоему блогу, Actionscript тебе знаком. А я просто искал человека, который бы помог 1-2 советами разобраться с небольшим кодом, для одной фотографии (хочу сделать псевдо вращение из 6 фотографий при помощи flash и action script) в своей скромной фотогалерее на моем сайте, который я пока разрабатываю. Если есть время уделить моему вопросу, то я изложу вопрос подробнее, если – нет, что ж и на том спасибо. Пожалуйста, дай знать.
Спасибо, надеюсь эти советы мне помогут..
Конечно помогут, мне, например, уже помогли, спасибо вам!
Спасибо за опыт, action script знать не помешает.
скажи у тя есть скайп надо поговорить
мне надо твой совет