![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Apr 2006
Сообщений: 36
|
Есть два класса - app (главный класс флэшки) и receiver (класс находящегося на сцене movie clip, по сути - потомок app);
app посылает сообщение и задача receiver - его услышать. receiver его не слышит. Полагаю, я плохо понимаю механизм посылки сообщений. Если кто либо может взглянуть на пример кода и поправить меня, буду очень благодарен. В приложенном файле весь пример целиком, а вот сам код app: package{
import flash.display.MovieClip;
import flash.events.ProgressEvent;
import flash.events.Event;
public class app extends MovieClip{
public function app(){
loaderInfo.addEventListener(ProgressEvent.PROGRESS,onProgress);
}
public function onProgress(e:ProgressEvent):void {
dispatchEvent(new Event('APP_PROGRESS'));
trace('message sended');
}
}
}
|
|
|||||
|
Banned
[+1 08.05.08]
[+4 14.04.08] [+1.3 02.05.08] Регистрация: Oct 2006
Адрес: кагбэ Киеф!!1
Сообщений: 1,473
|
ты же пиши кому извещать..
создай например глобальный инстанс и к нему крепи листенеры.. |
|
|||||
|
Регистрация: Apr 2006
Сообщений: 36
|
Что значит "пиши, кому извещать"? Извещает app. Он - верхний в иерархии класс, глобальнее вроде некуда. А если "кого извещать" - если бы app знал имена потомков то не было бы смысла в сообщениях - проще методы потомков вызывать
|
|
|||||
|
Регистрация: Apr 2006
Сообщений: 36
|
можно написать :
и сообщение принимается, но в документации при работе с сообщениями я таких финтов не вижу. Как я понял, сообщение сходит по дереву иерархии вниз, а если указать то и всплывает до самого верха. Я хочу понять принцип ошибки - где я не понял теорию? - иначе то что я делаю больше похоже на хак. Последний раз редактировалось akerka; 03.03.2008 в 22:41. |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Цитата:
Цитата:
ps: Названия классов пишутся с большой буквы, а обработчики приватные немешало бы сделать. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
А кто вас так научил классы называть и не научил кастомным событиям?
|
|
|||||
|
Знаю как сделать чтоб работало, но не понимаю почему не работает этот пример. Присоединяюсь к вопросу автора
__________________
Сам себе репортер |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Нужно использовать всплывающие события. Никаких хаков тут нет, событие от детей поднимается вверх по родителям. Если не использовать bubbling, то событие попадет только в те обработчики, которые были подписаны непосредственно у того, кто шлет событие.
|
|
|||||
|
Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
|
akerka,
проблемы с твоим кодом возникают из-за идеологически неверно простроеных отношений между классами. Добиться работоспособности можно, используя bubbling и targeting. Но код в итоге получится корявым. Что делать: 1. Переименовать. Да-да. Нет слова app в английском. А сократить так можно и appendix и application и, думаю еще не одно слово. Код пишется в первую очередь для человека. Ну, и учесть, что имена классов начинаются с большой буквы. Это - самое важное. Остальное мелочи. 2. Где-то у тебя создается экземпляр класса receiver (но мы договорились, что переименуем этот класс на более понятное, что-то типа ApplicationPreloaderReceiver). Вот там, где он создается, и нужно передать ссылку на экземпляр класса ныне именуемого app. И, затем, подпишемся на его события. зачеркнуто И, затем, подпишем его на события этого класса. /зачеркнуто 3. В коде мы не будем использовать строки и навешивать нехарактерное вещание на класс Event. Просто создадим класс - наследник Event, например ApplicationPreloaderEvent и создадим в нем публичную статическую константу APPLICATION_PROGRESS:String = "applicationProgress" и в дальнейшем в коде будем использовать только ее для вещания событий этого типа. Примерно так. Теоретически возможно, что передать ссылку на экземпляр app будет затруднительно. В этом случае, коль уж это так тяжело, этот класс следует во-первых переименовать например: MyFirstApplication, а во-вторых сделать его синглтоном и подписываться на событие используя получение ссылки через getInstance(). Впрочем, это не рекомендуемая практика. удачи. Последний раз редактировалось Iv; 05.03.2008 в 01:05. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
2. Каким образом? Откроем всем ветрам приватные обработчики событий?
Чем это бабблинг корявый вдруг стал? |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:49. |
|
|
« Предыдущая тема | Следующая тема » |
|
|