PDA

Просмотр полной версии : asBroadcaster, eventDispatcher


IsupovS
05.11.2007, 14:54
полазил по форуму, но вразумительного примера их использования так и не нашел. грубо говоря клип - меняет свое положение без какой нибудь посторонней помощи(т.е. без вмешательства пользователя) надо отловить изменение координаты клипа без использования onEnterFrame или setInterval.

udaaff
05.11.2007, 17:36
http://www.google.com/search?client=opera&rls=ru&q=EventDispatcher+site:Flasher.ru&sourceid=opera&ie=utf-8&oe=utf-8

IsupovS
05.11.2007, 18:44
Спасибо поиском я и сам умею пользоваться..
единственное что смог найти - это следующий код http://flasher.ru/forum/showthread.php?t=65962

terbooter
06.11.2007, 06:47
В любом случае вам придется вещать нужное событие "вручную", то есть проверять выполняется ли условие и если выполняется, то сказать всем слушателям о наступлении события.
А чтобы проверить выполнено ли условию придется вызывать периодическую проверку.

...
onEnterFrame = function ()
{
if (mc.initx != mc._x)
{
someObject.broadcastMessage("onMove")
}
};
...

wvxvw
06.11.2007, 11:07
var o:Object = {};
var _mc:MovieClip = _root.attachMovie("myLibMovie","myMovie",0);
AsBroadcaster.initialize(o);
o.addProperty("x",
function():Number{return this.__x},
function(n:Number){this.__x=n;_root.myMovie._x=n;this["broadcastMessage"]("xMove",this.__x);});
var l:Object = {};
l.xMove = function(n:Number):Void {
//Using broadcaster
trace("x set to: "+n);
}
o["addListener"](l);
o.watch("x",xWatcher);
function xWatcher(prop,oval,nval){
//Using object's predefined methods
trace("I'm watching u, u moved to: "+nval);
return nval;
}
o.x = 50;
Можно и без ентерфрейма =)

IsupovS
06.11.2007, 14:18
я этот вариант уже рассматривал, но это немного не то, тк событие срабатывает только тогда когда координата задается явно
o.x = 50;
то есть при движении мне все равно придется вызывать онЕнтерФрейм,
судя по всему в данной ситуации листенеры мне не помогут..

wvxvw
06.11.2007, 14:25
Ну, дык, надо так построить, чтобы координата всегда задавалась только таким способом. Ну, или если не хочется, тогда да, только проверять все время, других способов нет...