Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Action script 2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=49)
-   -   ASBroadcaster. Генрация классом своих событий. (http://www.flasher.ru/forum/showthread.php?t=63974)

Manowar1 20.10.2004 12:34

ASBroadcaster. Генрация классом своих событий.
 
Не могу понять некоторые вещи связанные с объектом ASBroadcaster. Во первых, почему когда делаешь
trace(ASBroadcaster) выводится undefined? Ну каким бы скрытым и не документированным этот объект не был, но он же должен себя хоть как - то проявлять.
И второй вопрос, у меня есть мувиклип и связаный с ним с помощью Linkage класс. Мне нужно, чтобы этот класс генерил события, как это сделать? Пробывал в конструкторе писать
ASBroadcaster.initialize(this); но это понятно не катит по скольку объекта ASBroadcaster он просто не видит, передавал в класс этот объект как параметр, но не понятно тогда, что должно вызывать broadcastMessage, если this.broadcastMessage, то опять же будет ругаться, чтот такого метода нету, короче бред какой-то. Кстати пробывал трейсить передоваемый объект ASBroadcaster - выдаётся undefined, ну блин - это хитрая особенность или этот бродкастер нужно как то хитро подключать.
Ах да, у меня Flash MX 2004, может в нём они вообще убрали этот бродкастер?

silin 20.10.2004 19:29

trace(AsBroadcaster), ну и далее в том же духе..

Manowar1 21.10.2004 11:07

Круто, надож было так купиться на ASBroadcaster. Блин а почему, на flash-rapper и в уроке здесь на сайте пишется именно ASBroadcaster?
Вообщем спасибо.

Proman 22.10.2004 18:09

Используй класс 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!");

мы создали свое собственное событие
Ты это имел ввиду?

Manowar1 25.10.2004 11:13

Цитата:

Оригинал написал(а) Proman
Используй класс 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!");

мы создали свое собственное событие
Ты это имел ввиду?

Ну вообщем чувствую, что то, но вот до конца понять не получается :). Если не сложно может объяснишь?
mx.events.EventDispatcher.initialize(this); это я так понимаю объявляется текущий класс генератором событий.
dispatchEvent(eventObject); - это генерация события? или тут какой то другой принцип изпользуется?
Не подскажешь, где можно прочитать про этот класс?

Proman 25.10.2004 13:59

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 я его читал :)

Manowar1 25.10.2004 18:15

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

Щас опишу ситуацию. У меня есть класс, котоорый привязан к мувиклипу по средствам 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);

Вопрос всё тотже, где ошибка и как её исправить?

Manowar1 26.10.2004 11:37

Блин всё работает, не знаю почему, но всё заработало.
Простот поменял имя у эвента и всё...

Proman 26.10.2004 15:08

Код:

_root.loader1.addEventListener(aObj);
Сдаеться мне проблема здесь. Метод addEventListener должен получать два параметра (имя события и ссылку на обьект Listener или функцию)

Manowar1 27.10.2004 10:54

Да это верно, без этого параметра оно тооже не работает, это я просто добавил код, после определённых колдовских манипуляция с целью обеспечения его работы :). А в начале я с параметром передовал, но увы.. Сейчас всё работает, мне кажется что я толи букву неправильную где-то записал, тооли ещё что-то в этом роде.

Кстати может подскажешь, пытался в этоом классе dispatcherEvent раставлять trace, но они нифига не работали, получается, что флеш откудато скомпиленный вариант класса берёт, не знаешь как его можно пересобрать?


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

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