Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как среда Flash определяет, какой событийный объект создать? (http://www.flasher.ru/forum/showthread.php?t=131763)

Felicast 29.10.2009 20:04

Цитата:

Мы просто не сможем получить доступ к свойствам и методам, определённым непосредственно в MouseEvent (localX, например)
ну почему не сможем. к нам придет то ведь все-равно MouseEvent, что мешает нам кастануть наш евент

SamFR 29.10.2009 20:06

Естественно, просто я именно хотел обратить внимание на то, в чём разница между типом и классом события.

TommyLee 30.10.2009 12:01

Цитата:

Сообщение от Felicast (Сообщение 861982)
в сотый раз говорю: ему абсолютно плевать, слушает кто его или нет.

Это я уже понял. Спасибо за пример реализации EventDispatcher.

Цитата:

Сообщение от Felicast (Сообщение 861982)
класс MouseEvent (к слову сказать, этот класс нативный (находится в самом плеере)

Получается, все предопределенные события - нативные, т.е. в коде можно их не создавать, как пользовательские объекты.
Далее:
- При возникновении однотипного события несколько раз, создается соответствующее количество объектов: например, щелкнул 3 раза - флеш создал 3 объекта события MouseEvent;
- импорт предопределенных событий. Только для удобства записи в коде.

Цитата:

Сообщение от SamFR (Сообщение 861983)
Диспетчер (в том числе то, что вы называете "среда")

То есть, когда я говорил о среде флеш, я говорил об объекте класса EventDispatcher?

SamFR 30.10.2009 12:17

Да, всё верно. Среда содержит в себе определённое количество нативных наследников EventDispatcher – диспетчеров событий. Эти события вручную создавать, как правило, нет необходимости, они создаются плеером.

Хотя никто вам этого делать не мешает: например, можно сгенерить в каком-нибудь DisplayObject-е событие MouseEvent.MOUSE_DOWN, и все подписчики будут думать, что в этом объекте был произведён щелчок мышью.

switcher! 30.10.2009 12:57

Цитата:

Сообщение от SamFR (Сообщение 861983)
Нет, import просто указывает компилятору, что данный класс используется в коде и позволяет получить к нему доступ без указания пакета. Можно обойтись и без импорта, но в этом случае всё время придётся вместо MouseEvent писать flash.events.MouseEvent.

Цитата:

Сообщение от TommyLee (Сообщение 862094)
- импорт предопределенных событий. Только для удобства записи в коде.

вот пример:
Код AS3:

package
{
        import flash.display.Sprite;
 
        public class Example extends Sprite {
                private var i:int;
 
                function Example():void {
                        var s:Sprite = new Sprite();
                        s.graphics.beginFill(0);
                        s.graphics.drawCircle(40, 40, 30);
                        s.addEventListener(flash.display.MouseEvent.CLICK, func3);
 
                        addChild(s);
                }
 
                private function func3(e:flash.display.MouseEvent):void {
                        trace(3);
                }
    }
}

не откомпилируется
и при этом да - MouseEvent зашит в плеер.

etc 30.10.2009 13:01

Цитата:

Сообщение от SamFR (Сообщение 861983)
Нет, import просто указывает компилятору, что данный класс используется в коде и позволяет получить к нему доступ без указания пакета. Можно обойтись и без импорта, но в этом случае всё время придётся вместо MouseEvent писать flash.events.MouseEvent.

Это в AS2 так можно было.

SamFR 30.10.2009 13:02

Не flash.display.MouseEvent, а flash.events.MouseEvent. Обратите внимание.

Добавлено через 4 минуты
Цитата:

Сообщение от etc (Сообщение 862108)
Это в AS2 так можно было.

Да, точно. Интересно, что же тогда импорт ещё делает в случае нативных классов, кроме расширения области видимости?

TommyLee 30.10.2009 13:08

Цитата:

Сообщение от etc (Сообщение 862108)
Это в AS2 так можно было.

Я что-то не правильно понял?

SamFR 30.10.2009 13:10

Цитата:

Сообщение от TommyLee (Сообщение 862111)
Я что-то не правильно понял?

Как оказывается, в AS3 импорт обязателен, просто указать пакет недостаточно.

switcher! 30.10.2009 13:22

Цитата:

Сообщение от SamFR (Сообщение 862109)
Не flash.display.MouseEvent, а flash.events.MouseEvent

пардон, опечатался, но не точности пути была суть, собственно )))

P.S. почитайте этот топик.


Часовой пояс GMT +4, время: 11:36.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.