![]() |
13. Событие MOUSE_LEAVE или как узнать что мышка за пределами SWF
В ActionScript 3 можно определить что мышка ушла за пределы флеш-ролика, используя событие mouseLeave для stage. Это событие происходит каждый раз, когда мышка покидает пределы ролика. Нет события mouseEnter, но можно использовать mouseMove для определения того, что мышка вернулась к нам.
Простой пример использования нарисованного квадрата в качестве своего курсора. Код:
package { |
15. Немного о синтаксисе в Array
При определении массива в ActionScript 3 с использованием квадратных скобок, теперь можно оставить запятую после последнего элемента и это не вызовет ошибки. Например:
Код:
var myList:Array = [Это не работает с Array() или new Array(), только с []. Это конечно мелочь, но при отладке может сэкономить время, если вам, к примеру, нужно временно убрать последний элемент массива, просто закомментировать его. Раньше еще приходилось и убирать запятую перед ним, теперь все проще. |
16. Пакеты в AS3
Пакеты в ActionScript 3 немного отличаются от пакетов в ActionScript 2. Теперь пакет это не часть имени класса, а блок определяемый ключевым словом package, который содержит в себе определение класса. Структура такова:
Код:
package my.package.path {Код:
// ActionScript 2:Код:
package {Код:
package com.kirupa.utils { |
19. Абстрактные классы
К сожалению, ActionScript 3 НЕ поддерживает абстрактные классы (экземпляры которых нельзя создать, а можно только унаследовать). Т.е. вы не можете создавать ваши собственные абстрактные классы. Однако, обратите внимание, что некоторые из внутренних классов ActionScript сами по себе являются абстрактными. Эти классы включают:
Код:
var myObj:InteractiveObject = new InteractiveObject(); // ERRORКод:
package {Вместо этого вам необходимо расширять те внутренние классы, которые уже являются наследниками этих классов. К примеру, если вы хотите расширить DisplayObject, вы можете вместо этого расширить Shape, легкий встроенный класс, унаследованный от DisplayObject. |
20. Ключевое слово override
Перекрытием (overriding) называется переопределение метода в классе, который в противном случае был бы унаследован. Новый метод будет использоваться вместо унаследованного (хотя унаследованный метод остается доступен с использованием super).
В ActionScript 3, когда вы перекрываете метод или свойство родительского класса, вы должны использовать аттрибут override. Он указывает на то, что создаваемый вами член класса будет перекрывать тот, который иначе был бы унаследован. Если вы не укажете override для метода, который уже существует в родительском классе, возникнет ошибка компиляции. Пример: Код:
package {Обратите внимание, что описание метода должно соответствовать перекрываемому Перекрытие работает как с обычными методами класса, так и с getter/setter методами (свойствами), однако оно не будет работать ни с чем из нижеперечисленного:
Обратите также внимание, что перекрытие не требуется для методов, которые наследуются непосредственно от класса Object. Это:
Однако, если расширяется класс, в котором приведенные выше методы являются частью его описания, ключевое слово override необходимо. Например, если вы расширяете класс Object, вам не нужно использовать override для метода toString. Но если вы расширяете класс Sprite, вам потребуется перекрывать toString, т.к. класс Sprite имеет в своем описании собственный toString. |
90. Операторы (.) и (..) для XML
Для доступа к вложенным объектам (детям) в XML вы можете использовать оператор точка (.) (XML dot operator). Пример:
Код:
var myXML:XML = Код:
<bar/>Код:
trace(myXML.elements("bar").toXMLString());Код:
var myXML:XML = Код:
Children:Код:
trace(myXML.descendants("author").toXMLString()); |
91. Array.indexOf и Array.lastIndexOf
В классе Array (Top level Array) добавлены новые методы indexOf и lastIndexOf.
Код:
AS3 function indexOf(searchElement:*, fromIndex:int = 0):intКод:
var sprite:Sprite = new Sprite(); |
92. "asfunction:" теперь "event:"
Для создания ссылок в текстовом поле, клик по которым можно программно отловить, теперь нужно использовать слово event (flash.text.TextField.event:link), а не asfunction как это было в ActionScript 1 и 2. Кроме того, event теперь не вызывает указанную функцию а создает событие TextEvent (flash.events.TextEvent) с типом TextEvent.LINK, а в свойство text записывается текст указанный в ссылке после слова event.
Пример: Код:
var linkText:TextField = new TextField(); |
93. Proxy: методы перечисления (nextName(), nextValue(), nextNameIndex())
Помимо создания динамических свойств и методов в Proxy (flash.utils.Proxy) есть возможность управлять порядком перечисления свойств в циклах for..in и for each..in. Для этого используются методы класса:
1) предоставляет порядковый номер для nextName и nextValue (если возвращаемое значение >0), или 2) прерывает цикл (если возвращаемое значение равно нулю). При начале цикла nextNameIndex получает порядковый номер равный нулю. Каждое последующее значение возвращаемое nextNameIndex отлично от нуля и передается методам nextName и nextValue. Если nextNameIndex возвращает ноль, то цикл заканчивается. К примеру, proxy имеет 3 свойства (x,y,visible), попробуем их перечислить в цикле for..in Код:
for (var prop:String in proxy) {Код:
for (var prop:String in proxy) {Поскольку в циклах используется порядковый номер, то удобно хранить динамические свойства в массиве и в методах nextName или nextValue просто вернуть элемент массива index-1 (поскольку nextName и nextValue никогда не получают порядкового номера 0). Создадим прокси-класс, который реализует пример выше. Помните, что методы proxy определены в пространстве имен flash_proxy. Код:
package {Код:
var proxy:ProxyEnum = new ProxyEnum();Код:
package {Код:
var proxy:ProxyEnum = new ProxyEnum(my_mc); |
94. Перехват событий мышки и mouseEnabled
MerlinTwi: Поскольку этот совет (Event Capturing and mouseEnabled) в оригинале практически дублирует (72. mouseEnabled и блокирование событий), видимо senocular где-то ошибся, то я сам расскажу еще про mouseEnabled.
К примеру, создаем класс текстовой кнопки, есть фоновый мувиклип, который растягивается под ширину текста и сверху на него накладывается текст (TextField). Если обработчики событий от мышки (MOUSE_OVER, MOUSE_OUT, CLICK) добавить к фоновому мувиклипу, то события будут срабатывать только на краях кнопки, где нет текста. Это происходит потому, что все интерактивные отображаемые объекты создаются по умолчанию с mouseEnabled=true, т.е. реагируют на события от мышки, а как было показано в предыдущих советах событие от мышки получает только самый верхний объект на сцене. Поэтому в таких случаях нужно не забывать запрещать текстовому полю перехватывать события от мышки: Код:
mouseEnabled=false;Код:
buttonMode=true; |
| Часовой пояс GMT +4, время: 23:55. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.