![]() |
86. Больше нет класса Color, используйте ColorTransform
В ActionScript 3 больше нет класса Color, взамен можно использовать класс ColorTransform (flash.geom.ColorTransform). По сути это тот же класс ColorTransform что был и в Flash Player 8, только свойство rgb было переименовано в color.
Код:
// создаем красный квадрат |
88. Ошибки: try..catch..finally
Для перехвата ошибок вы можете использовать (try..catch..finally statement).
Код:
try {Пример: Код:
try {Код:
TypeError catch: TypeError: Error #1006: getChildAt is not a function.Что произойдет, если не будет блока catch соответствующего типу возникшей ошибки: Код:
try {Код:
Finally! |
89. Перехват асинхронных ошибок
Иногда ошибка может произойти намного позже того, как была вызвана функция ее спровоцировавшая. Например, загрузка внешнего контента с помощью (flash.net.URLLoader). После вызова URLLoader.load с неправильным URL, плеер продолжит выполнение дальнейшего кода, а непосредственно процесс загрузки начнется позже, и только тогда возникнет ошибка. В таких случаях использование блока try..catch..finally не поможет, т.к. в самом коде в момент выполнения ошибки нет.
Пример: Код:
var loader:URLLoader = new URLLoader();Код:
Continuing with script...В подобных случаях можно просто использовать обработчики событий. Код:
var loader:URLLoader = new URLLoader();Код:
Continuing with script... |
4. Новые типы переменных
ActionScript 3 поддерживает широкий диапазон типов переменных, включая несколько отсутствующих в предыдущих версиях ActionScript. Основные типы для AS3:
Простые:
Сложные:
Примечание:
|
5. Отображаемые объекты (Display Objects)
ActionScript 3 пополнилась коллекция "отображаемых объектов", которые могут быть видимы на экране и добавлены в "display list".
Отображаемые объекты AS3 :
*Для ссылки на объекты существующие в timeline; вы не можете создавать их с помощью AS. AVM1Movie представляет собой flash-ролик, созданный в ActionScript 1 или 2. Эти ролики используют ActionScript Virtual Maching 1, тогда как AS3 ролики используют AVM2. AVM2 ролики могут проигрывать ролики AVM1, но не могут взаимодействовать с ними (с их ActionScript) используя AS3. Bitmaps - объекты bitmap. Вы можете задавать им изображение с помощью BitmapData объектов или это могут быть bitmap-картинки из файлов. Объекты Loader - отображаемые объекты, которые загружают в себя внешнее содержимое. Это могут быть изображения или другие SWF-приложения. MorphShapes - это shape tweens (анимации фигур), созданные на timeline. Хотя вы не можете создать их в ActionScript, вы можете получить доступ к уже существующим на timeline, используя ActionScript и они будут иметь тип MorphShape. MovieClips - это ролики, которые вы знаете и любите. Shapes это разобранные ролики, которые по существу содержат только graphics object для рисования в нем с использованием vector drawing API. Использование Shapes вместо MovieClips или Sprites может помочь сэкономить память Sprite объекты - по существу ролики без timelines. Это наиболее часто используемый тип в AS3, и обычно он расширяется при создании вашего собственного подкласса отображаемых объектов. StaticText, как и MorphShapes, не могут быть созданы в ActionScript, ссылаясь вместо этого на объекты static text, созданные на Flash timeline. Объекты TextField включают dynamic и input text. Объекты Video представляют Flash video. |
6. Новая директива Import
Директива import в ActionScript 3 немного отличается от import в ActionScript 2. В AS2 import использовался только для сокращения имен классов, определенных в пакетах; она не была обязательной для использования класса. Вместо использования import, вы могли просто использовать полное имя класса, например:
Код:
// ActionScript 2Код:
// ActionScript 3Код:
import flash.geom.*; |
7. Приведение типов и оператор as
ActionScript позволяет заменить назначенный объекту тип на другой совместимый при необходимости. Это называется приведением (casting). Оба ActionScript 2 и 3 поддерживают приведение с использованием синтаксиса type(object). Например, если объект вашего класса был назначен переменной как object, вы можете переопределить типизацию для этого объекта приведением его к типу вашего класса, дав таким образом возможность Flash знать какие именно методы и свойства доступны у этого объекта
Код:
var obj:Object = getMyCustomObject();Код:
var obj:Object = getMyCustomObject();ActionScript 3 все еще поддерживает type(object) приведение, но его поведение имеет теперь некоторые отличия. Вместо возврата null при неправильном приведении, генерируется TypeError. Сбой происходит когда вы пытаетесь привести объект к несовместимому типу, например при попытке привести объект к не связанному (not associated) или унаследованному типу. Примечание: ActionScript также имеет глобальные функции преобразования для этих целей в стиле Class(object), имеющие приоритет над приведением type(object). Это такие функции, как String(), Number(), Array() и т.д. Они не выполняют приведение настолько же как фактическое преобразование одного объекта в другой (когда это возможно). Т.к. эти функции приоритетнее type(object), предпочтительнее использовать оператор as для приведения объектов к другому типу данных. |
10. Ключевое слово delete и члены класса
Ключевое слово delete во Flash используется для удаления определений переменных. Оно не удаляет объекты из памяти (это происходит за кулисами с помощью так называемого "сборщика мусора" /"Garbage Collector"/ ), а просто берет созданную вами переменную и избавляется от нее, делая ее недоступной и невидимой для итераторов (for..in циклы, и т.п.).
Внутренние механизмы Garbage Collector (GC для краткости), знают когда физически удалять объекты из памяти - когда больше нет переменных, ссылающихся на них. Так, например, если у вас есть две переменные A и B и они обе ссылаются на ObjectX, удаление переменной A не приведет к удалению сборщиком мусора ObjectX из памяти. Однако, если вы удалите обе переменные A и B, больше не будет ссылок на ObjectX и GC будет знать, что объект нуждается в удалении из памяти Код:
var a:Object = new Object();Хотя GC и новая виртуальная машина, управляющая им, на самом деле не сильно изменились в ActionScript 3, что изменилось, так это поведение ключевого слова delete. Теперь ключевое слово delete работает только для динамических свойств экземпляров класса, но не для объявленных членов класса (переменных и методов). В ActionScript 1 и 2 delete можно было использовать для всего. ActionScript 3 позволит только удалить динамические переменные и заблокирует прочее. Код:
// ActionScript 2Код:
// ActionScript 3Поскольку вы не можете удалять члены класса в ActionScript 3, если вы хотите, чтобы переменная больше не ссылалась на объект или значение в памяти, вы можете установить значение переменной в null вместо ее удаления. Код:
myVar = null; |
11. Класс Dictionary
Класс Dictionary (flash.utils.Dictionary) - новое дополнение в ActionScript. Он представляет собой то же самое, что и базовые объекты Object, за исключением одной особенности: в объектах Dictionary в качестве ключей могут быть использованы не только строки, но и любые другие значения.
Object использует только строковые ключи. Если в качестве для ключа используется не строковое значение, оно интерпретируется в строку. Пример: Код:
var obj:Object = new Object();Код:
var a:Object = new Object();Код:
import flash.utils.Dictionary;Обратите внимание, что prop здесь определена как *. Это важно, т.к. ключи в объекте dict могут быть любого типа. Если вы используете String как тип prop, объекты a и b при их выборке в цикле будут приводиться к строкам, помещая в prop "[object Object]" вместо действительных ссылок на a и b, которыми они должны быть для корректного доступа к значениям 1 и 2 из dict. |
12. Метки
В ActionScript 3 введены метки (url=http://livedocs.macromedia.com/flex/2/langref/statements.html#label]labels[/url]), новые идентификаторы, которые можно привязывать к блокам циклов. Зачем вам может понадобиться идентифицировать блок цикла? Потому, что этот идентификатор можно использовать в командах break и continue. Представьте себе два цикла, один вложен в другой. Если в какой-то момент вы захотите прервать оба цикла, находясь во внутреннем, вы этого сделать не сможете. Команда break прервет только текущий блок. Обычно для этих целей используют переменную-флаг, которую устанавливают во внутреннем цикле, чтобы иметь возможность проверить во внешнем и, при необходимости, выйти также и из него. Пример:
Код:
var i:Number;Метки позволяют вам идентифицировать и прерывать указанный цикл (а также все вложенные в него). Формат метки label: statement Пример: Код:
var i:Number; |
| Часовой пояс GMT +4, время: 03:49. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.