
Код:
import mx.utils.Delegate;
/**
* Pulser class. Do not instantiate, use static Pulser.getInstance()
* instead. Provides AsBroadcaster style ability for any object to recieve
* playback updates.
* @author wvxvw
*/
class Pulser
{
/**
* String. "pulserPlay".
*/
public static var PULSER_PLAY:String = "pulserPlay";
/**
* String. "pulserStop".
*/
public static var PULSER_STOP:String = "pulserStop";
private static var _instance:Pulser;
/**
* AsBroadcaster style decoration.
* Will be overriden by AsBroadcaster.initialize().
*/
public var addListener:Function;
/**
* AsBroadcaster style decoration.
* Will be overriden by AsBroadcaster.initialize().
*/
public var removeListener:Function;
/**
* AsBroadcaster style decoration.
* Will be overriden by AsBroadcaster.initialize().
*/
public var broadcastMessage:Function;
private var _clip:MovieClip;
private function Pulser()
{
AsBroadcaster.initialize(this);
_clip = _root.createEmptyMovieClip("Pulse_clip", 1234);
}
/**
* Starts the playback.
*/
public function play():Void
{
_clip.onEnterFrame = Delegate.create(this, enterfameDelegate);
}
/**
* Pauses the playback.
*/
public function stop():Void
{
delete _clip.onEnterFrame;
}
private function enterfameDelegate():Void
{
broadcastMessage(PULSER_PLAY);
}
/**
* Returns link to Pulse instance.
* @return Pulser.
*/
public static function getInstance():Pulser
{
if (!_instance)_instance = new Pulser();
return _instance;
}
}

Код:
import Pulser;
class Main
{
public static var test0:Object;
public static var test1:Object;
public static function main():Void
{
test0 = { i:0 };
test1 = { j:0 };
test0.toString = function():String { return "test0 i=\"" + this.i + "\"" };
test1.toString = function():String { return "test1 j=\"" + this.j + "\"" };
test0[Pulser.PULSER_PLAY] = function():Void
{
this.i++;
trace(this)
}
test1[Pulser.PULSER_PLAY] = function():Void
{
this.j++;
trace(this)
}
Pulser.getInstance().addListener(test0);
Pulser.getInstance().addListener(test1);
Pulser.getInstance().play();
}
}
Конечно, писать так, как в тесте не нужно, это именно тест, просто чтобы запись была короче.