Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   EventDispatcher and classes (http://www.flasher.ru/forum/showthread.php?t=120848)

rudra 01.02.2009 18:53

EventDispatcher and classes
 
Привет. Проблема такая:

Есть 2 класса. В одном классе событие создается, в другом - слушается.
В начале пробовал сделать это через stage.dispatchEvent(new Event("DELETE_WINDOW")); а во втором классе stage.addEventListener("DELETE_WINDOW", aaa);
в результате: TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".

Затем вкурил вот это http://help.adobe.com/ru_RU/AS3LCR/F...ispatcher.html
и ветки форума. Но не вставило. Родилась вот такая кухня:
Код AS3:

import flash.events.IEventDispatcher;
        import flash.events.EventDispatcher;
        import flash.events.Event;
 
        class customEvents implements IEventDispatcher {     
            private var dispatcher:EventDispatcher;
 
            public function customEvents()
                {
                dispatcher = new EventDispatcher(this);
            }
и так далее по тексту примера

плюс в классе-диспатчере:
customDisp.dispatchEvent(new Event("DELETE_WINDOW")); в методе
и
public var customDisp:customEvents = new customEvents(); в переменных класса
А в классе-листнере:
customDisp.addEventListener("DELETE_WINDOW", aaa);

Теперь у меня есть 1120: Access of undefined property customDisp.
Переменная в упор вторым классом не видится.
Как заставить всю эту штуку работать? Благодарю.

etc 01.02.2009 19:05

Сначала нужно дождаться добавления на сцену, потом уже подписываться на события.
К тому же, непонятно, каким образом вы хотите получить невсплывающее событие от Stage.

BlooDHounD 01.02.2009 19:06

а где можно увидеть всю эту штуку? Вы не привили никакого примера того где у вас, что-то не так. экстрасенсы покинули форум.

gloomyBrain 01.02.2009 19:19

По поводу
Код AS3:

import flash.events.IEventDispatcher;

могу предположить, что import применяется для классов, а для интерфейсов в определении класса стоит добавить ключевое слово implements

когда Вы пишете
Код AS3:

object.addEventListener(event, handler)

1) должен существовать object
2) должен существовать event (хотя можно заменить его на new Event("some_string"))
3) должен существовать handler + он должен быть public

для организации подобного рода взаимодействия между объектами разных классов можно передавать ссылки в прописанные в объектах функции
Проще говоря, есть родительский объект A.
- В нем при создании дочернего объекта B мы регистрируем ссылку на B
- При создании дочернего объекта C мы регистрируем ссылку на C
- В самом объекте B мы диспатчим некое событие, а в родительском A его слушаем
- Когда событие услышано - вызываем нужную функцию объекта C
Соответственно, одно условие: у объектов B и C должен быть общий родитель A

etc 01.02.2009 19:55

Цитата:

Сообщение от gloomyBrain (Сообщение 794877)
он должен быть public

Это ещё почему?

rudra 01.02.2009 20:06

Цитата:

Сообщение от __etc (Сообщение 794873)
Сначала нужно дождаться добавления на сцену, потом уже подписываться на события.

Это оно!! :drinks: ADDED_TO_STAGE помогло.

Всем спасибо.

gloomyBrain 01.02.2009 20:38

Цитата:

Это ещё почему?
потому что сегодня воскресенье, а я работаю =)
Сори, не должен конечно =)


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

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