![]() |
ASBroadcaster. Генрация классом своих событий.
Не могу понять некоторые вещи связанные с объектом ASBroadcaster. Во первых, почему когда делаешь
trace(ASBroadcaster) выводится undefined? Ну каким бы скрытым и не документированным этот объект не был, но он же должен себя хоть как - то проявлять. И второй вопрос, у меня есть мувиклип и связаный с ним с помощью Linkage класс. Мне нужно, чтобы этот класс генерил события, как это сделать? Пробывал в конструкторе писать ASBroadcaster.initialize(this); но это понятно не катит по скольку объекта ASBroadcaster он просто не видит, передавал в класс этот объект как параметр, но не понятно тогда, что должно вызывать broadcastMessage, если this.broadcastMessage, то опять же будет ругаться, чтот такого метода нету, короче бред какой-то. Кстати пробывал трейсить передоваемый объект ASBroadcaster - выдаётся undefined, ну блин - это хитрая особенность или этот бродкастер нужно как то хитро подключать. Ах да, у меня Flash MX 2004, может в нём они вообще убрали этот бродкастер? |
trace(AsBroadcaster), ну и далее в том же духе..
|
Круто, надож было так купиться на ASBroadcaster. Блин а почему, на flash-rapper и в уроке здесь на сайте пишется именно ASBroadcaster?
Вообщем спасибо. |
Используй класс EventDispatcher
допустим твой класс: Код:
import mx.events.EventDispatcher;Код:
var chat:Babble = new Babble();Ты это имел ввиду? |
Цитата:
mx.events.EventDispatcher.initialize(this); это я так понимаю объявляется текущий класс генератором событий. dispatchEvent(eventObject); - это генерация события? или тут какой то другой принцип изпользуется? Не подскажешь, где можно прочитать про этот класс? |
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 я его читал :) |
твой пример если взять так прямо работает без проблем, но я попытался вставить, туда куда мне нужно, и ноль реакций.
Щас опишу ситуацию. У меня есть класс, котоорый привязан к мувиклипу по средствам Linkage и наследуется от класса MovieClip. На главную сцену я его переношу посредством attachMovie. При этоом по идее создаётся объект этого класса автоматически. Но эвенты совсем не хотят работать. Вот пример класса (всё не относящееся к делу выкинуто) Код:
import mx.events.EventDispatcher;Код:
var obj:Object = new Object(); |
Блин всё работает, не знаю почему, но всё заработало.
Простот поменял имя у эвента и всё... |
Код:
_root.loader1.addEventListener(aObj); |
Да это верно, без этого параметра оно тооже не работает, это я просто добавил код, после определённых колдовских манипуляция с целью обеспечения его работы :). А в начале я с параметром передовал, но увы.. Сейчас всё работает, мне кажется что я толи букву неправильную где-то записал, тооли ещё что-то в этом роде.
Кстати может подскажешь, пытался в этоом классе dispatcherEvent раставлять trace, но они нифига не работали, получается, что флеш откудато скомпиленный вариант класса берёт, не знаешь как его можно пересобрать? |
Ты видимо не с "тем" классом работаеш.
Флэш при запуске создает копию директории Classes в Код:
C:\Documents and Settings\Your_profile\Local Settings\ |
вот блин!!
Век живи век учись, спасибо тебе большое! |
если не трудно то объясните пожалуйста, по подробнее как добавить событие к классу, скажем есть класс XMC к нему нужно добавить событие onDoubleClick , как этого можно добиться?
спасибо заранее |
могу предложить тебе такой вариант
Класс для отслеживания двойного нажатия testEvent.as Код:
class testEvent{Код:
te = new testEvent();Но это в том случае если тебе нужно просто отследить двойное нажатие, если же тебе нужно чтоб класс генерил своё событие по двойному щелчку, то trace нужно заменить на вышесказанное Proman' ом по поводу eventDispatcher |
Мановар, да вот я читаю и пытаюсь так сказать вникнуть, двойной клик это только пример так сказать, я щас использую похожую систему с твоей( только не создаю для нее отдельного класса, я просто отслеживаю когда менюшка находиться в зоне видимости а когда оно невидимое). но хотелось бы создать функцию которая работала как буилдин события(типа тех же рол овер, интер фрейм) а в то что написал Проман,я еще не врубился=(
|
вариант:
Код:
import mx.events.EventDispatcherКод:
var cd:XMC = new XMC(300); |
Извращенцы, нафиг вам EventDispatchet? Я понимаю еще сложнейший проект, и то люди переписывают этот класс потому что у ММ там лажа полная, AsBroadcaster или mx.transitions.BroadcasterMX - по уши хватит :)
|
полностью согласен с забором, в этом раскладе класс на двойной клик выглядит
Код:
class DblClick extends MovieClip{mc.onDoubleClick=function(){trace("dbl")}//mc связан с классом с помощью Linkage зы:однако ж раз диспатчер существует надо и его пробывать, хотя б для того что бы разобраться и сравнить |
Что касается диспатчера - это просто расширенная событийная модель, вот и все ...
Код:
Что касается MovieClip.onDblClick - опять же зачем городить? Ну ни кто ведь не отменял прототипы, и та же ММ их использует в своих классах ... во всяком случае, в, примерно, таком виде ... Код:
class mx.Extensions.MovieClipExtensionsДа есть момент, что MovieClip - это dynamic class, но не важно, кто мешает для того же String, залезть в String.as и добавить либо ключевое слово dynamic, или зарезервировать местечко для своего метода, типа: function hello():Void; И далее в подключаемом StringExtension уже его определить ... Кстати если поставить себе Central SDK - то можно увидеть как обновится тот же String.as (function replace( re:String, repl:String ):String; // Central API) Вобщем будте проще :) |
про дабл клик
Про onDoubleClick - это я к тому, что Ноксовский вариант ничуть не устарел ;)
Что onDoubleClick должен быть у Mouse, а не у какой-то там class SDAA345klklk35lbjj ... :) |
Цитата:
Например, если необходимо связать какой-то обьект с компонентом без постоянных вызовов execute, то очень даже помогает. :) А так я согласен, AsBroadcaster-а в большенстве случаев достаточно. |
"без постоянных вызовов execute" - каких еще вызовов? ;) о чем ты дарагой? :)
|
Silin, твой пример, с использованием AsBroadcater, что-то совсем не работает, или я как - тот неправильно создаю объект, можешь более подробнее описать?
|
llllllllll
Цитата:
Код:
import mx.data.binding.*;Код:
src_fld.onChanged = function() {Код:
import mx.events.EventDispatcher;Вот это я и имел ввиду. |
llllllllll
Цитата:
Код:
import mx.data.binding.*;Код:
src_fld.onChanged = function() {Код:
import mx.events.EventDispatcher;Вот это я и имел ввиду. |
честно говоря не знаю с какого боку начинать.
вот пример. есть тултипа. должна появляться когда мышка наводить какие либо кнопки(не все) тоесть нужно событие тултипы которое реагирует на навод мышки к кнопке(все эти кнопки принадлежат классу SubButton) вот сижу уже полчаса и думаю как бы лучше это дело огранизовать. ЗЫ тултип это объект в котором будет 1 мувик и 2-3 текстовых полей.ну и тоже принадлежит к своему собственному классу |
Вложений: 1
Цитата:
2Nirth : непонятно в чем трабл - что тебе мешает в твоем SubButton определить onRollOver() ? |
ну дело не в том что мешает а в том что хочеться освоить данную фичу=) пусть даже пока на не нужных вещах.
столкнулся я тут с проблемкой с твои исходником. если я убираю с рута эту строчку Код:
mc.onDoubleClick=function(){trace("dd")}Код:
this.onDoubleClick=function(){trace("dd")}dd dd dd dd тоесть они одновременно реагируют. а как зделать это отдельным для каждого экземпляра? пытался сделать уже и объект bc и функцию приватной, ничерта. |
а как же - это же мышиное событие,
можно, например, HitTest приделать, тогда будет срабатывать только на мувике как onPress Код:
class DblClick extends MovieClip{ |
2 Sliin да спасибо, я уже понял что такое листенеры=) я сделал примерно такоеже но с помощью еще онРоллОвер, РолАут
спасибо=) *ушел мучаться дальше* |
туплю не по детски
думал разобрался но нет =(
по моему скомному мнению это дело должно добавить событие onSecond(вызываеться раз в секунду); Код:
function second():Void {There is no method with the name 'broadcastMessage'. интересно то что если делать вот так Код:
function second():Void { |
непонять чего ты добиваешься
Код:
AsBroadcaster.initialize(brodcaster={})//инициализируем вещательный объект |
мой класс это часы, чтобы не вешать событие на onEnterFrame я хочу повесить на онСеконд(тоесть чтоб проверялось только раз в секунду а не 20 раз в секунду).
|
Silin
если не трудно мог бы объяснить почему надо каждый раз создавать листенер, тоесть это похоже на обходной путь, я создаю объект, делаю ему событие и подписываю уже мувик на получение, и почему не работает прямая привязка(this)? |
не пойму чего ты хочешь получить - событие каждую секунду?
Цитата:
Цитата:
Цитата:
Код:
class Sec extends MovieClip{ |
Вложений: 1
:)
|
я тут задним числом подумал, что не нужен тебе бродкастер
(по сути ты пытаешься заставить мувик вещать самому себе) вот так будет уместнее (проще надо быть) Код:
class Sec extends MovieClip{ |
Цитата:
|
Цитата:
|
Про поля забудь, ... я в хелп тоже заглядывал, и если там напишут головой об стену биться, видимо ряды форума поредеют ...
А речь как раз о том, о "Классе - Два умножить на Два", ксати, ММ, продукты свои , к пример Breeze Player - делает как надо ;) с TellTarget и ты ды :) |
| Часовой пояс GMT +4, время: 13:10. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.