|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Jan 2002
Адрес: Kharkov
Сообщений: 57
|
ASBroadcaster. Генрация классом своих событий.
Не могу понять некоторые вещи связанные с объектом ASBroadcaster. Во первых, почему когда делаешь
trace(ASBroadcaster) выводится undefined? Ну каким бы скрытым и не документированным этот объект не был, но он же должен себя хоть как - то проявлять. И второй вопрос, у меня есть мувиклип и связаный с ним с помощью Linkage класс. Мне нужно, чтобы этот класс генерил события, как это сделать? Пробывал в конструкторе писать ASBroadcaster.initialize(this); но это понятно не катит по скольку объекта ASBroadcaster он просто не видит, передавал в класс этот объект как параметр, но не понятно тогда, что должно вызывать broadcastMessage, если this.broadcastMessage, то опять же будет ругаться, чтот такого метода нету, короче бред какой-то. Кстати пробывал трейсить передоваемый объект ASBroadcaster - выдаётся undefined, ну блин - это хитрая особенность или этот бродкастер нужно как то хитро подключать. Ах да, у меня Flash MX 2004, может в нём они вообще убрали этот бродкастер? |
|
|||||
Регистрация: Jan 2002
Адрес: Kharkov
Сообщений: 57
|
Круто, надож было так купиться на ASBroadcaster. Блин а почему, на flash-rapper и в уроке здесь на сайте пишется именно ASBroadcaster?
Вообщем спасибо. |
|
|||||
Используй класс EventDispatcher
допустим твой класс: import mx.events.EventDispatcher; class Babble { function Babble() { mx.events.EventDispatcher.initialize(this); } function say(phrase:String) { trace(phrase); var eventObject:Object = {target:this, type:'said'}; eventObject.phrase = phrase; dispatchEvent(eventObject); } function dispatchEvent() { } function addEventListener() { } function removeEventListener() { } } var chat:Babble = new Babble(); var listener:Object = new Object; listener.said = function(event) { trace("Фраза сказана!"); trace("Свойство type: "+ event.type); trace("Свойство target: "+ event.target); trace("Свойство phrase: "+ event.phrase); } chat.addEventListener("said",listener); chat.say("Hello World!"); Ты это имел ввиду?
__________________
Don't use the Force, Luke - try to THINK! |
|
|||||
Регистрация: Jan 2002
Адрес: Kharkov
Сообщений: 57
|
Цитата:
mx.events.EventDispatcher.initialize(this); это я так понимаю объявляется текущий класс генератором событий. dispatchEvent(eventObject); - это генерация события? или тут какой то другой принцип изпользуется? Не подскажешь, где можно прочитать про этот класс? Последний раз редактировалось Manowar1; 25.10.2004 в 11:15. |
|
|||||
EventDispatcher.initialize(this); -- методы класса EventDispatcher копируються в твой класс.
var dispatchEvent:Function; var addEventListener:Function; var removeEventListener:Function; собственно методы которые копируються dispatchEvent -- посылает обьект события всем зарегистрированным с твоим классом listener-ам. Где почитать не знаю, в хэлпе есть и собственно сам \Flash MX 2004\en\First Run\Classes\mx\events\EventDispatcher.as я его читал
__________________
Don't use the Force, Luke - try to THINK! |
|
|||||
Регистрация: Jan 2002
Адрес: Kharkov
Сообщений: 57
|
твой пример если взять так прямо работает без проблем, но я попытался вставить, туда куда мне нужно, и ноль реакций.
Щас опишу ситуацию. У меня есть класс, котоорый привязан к мувиклипу по средствам Linkage и наследуется от класса MovieClip. На главную сцену я его переношу посредством attachMovie. При этоом по идее создаётся объект этого класса автоматически. Но эвенты совсем не хотят работать. Вот пример класса (всё не относящееся к делу выкинуто) import mx.events.EventDispatcher; class loader extends MovieClip{ var x:Number; var y:Number; var barWidth:Number; var target:MovieClip; function loader(){ ........................... mx.events.EventDispatcher.initialize(this); onEnterFrame = run; ................................ } function run() { ............................... setFinishHandler(); ............................... } function setFinishHandler(){ var eventObject:Object = {target:this, type:'eventMovieLoaded'}; dispatchEvent(eventObject); } function dispatchEvent() { } function addEventListener() { } function removeEventListener() { } } var obj:Object = new Object(); obj.target = _root; obj.x = 100; obj.y = 100; obj.barWidth = 300; var aObj:Object = new Object(); aObj.eventMovieLoaded = function(eventObj){ trace('loaded'); } _root.attachMovie('loader', 'loader1', 2, obj); _root.loader1.addEventListener(aObj); trace(_root.loader1.x); |
|
|||||
Регистрация: Jan 2002
Адрес: Kharkov
Сообщений: 57
|
Блин всё работает, не знаю почему, но всё заработало.
Простот поменял имя у эвента и всё... |
|
|||||
Сдаеться мне проблема здесь. Метод addEventListener должен получать два параметра (имя события и ссылку на обьект Listener или функцию)
__________________
Don't use the Force, Luke - try to THINK! |
|
|||||
Регистрация: Jan 2002
Адрес: Kharkov
Сообщений: 57
|
Да это верно, без этого параметра оно тооже не работает, это я просто добавил код, после определённых колдовских манипуляция с целью обеспечения его работы . А в начале я с параметром передовал, но увы.. Сейчас всё работает, мне кажется что я толи букву неправильную где-то записал, тооли ещё что-то в этом роде.
Кстати может подскажешь, пытался в этоом классе dispatcherEvent раставлять trace, но они нифига не работали, получается, что флеш откудато скомпиленный вариант класса берёт, не знаешь как его можно пересобрать? |
Часовой пояс GMT +4, время: 17:37. |
|
« Предыдущая тема | Следующая тема » |
|
|