I've got a class here that manages intervals as well. It can be used to
create intervals that fire off once (after a delay), continuously or a
specified number of times. The events can then be applied to the parent
object or another target object.
Cheers,
Karina
/**
* Delay class - executes callbacks, broadcasts messages and events the
parent (or a passed target) after a set delay.
*
* @author Karina Steffens
* @version 1.0
* @usage
* @class
*/
class com.neoarchaic.util.Delay {
public var parent:Object;
private var events:Object;
private var index:Number;
function Delay (aparent:Object) {
parent = aparent;
index = 0;
events = new Object ();
}
/**Broadcast the message to the parent after the delay.
* @param target Object
* @param evt String
* @param delay Number
*/
public function doLater ():String {
//target:Object, evt:String, delay:Number
//_global.tt ("doLater", arguments)
return storeMessage ("doLater", arguments);
}
/**Broadcast the message to the parent after the delay.
* @param target Object
* @param evt String
* @param delay Number
*/
public function doLoop ():String {
return storeMessage ("doLoop", arguments);
}
/**Broadcast the message to the parent after the delay.
* @param target Object
* @param evt String
* @param delay Number
* @param times Number
*/
public function doRepeat ():String {
return storeMessage ("doRepeat", arguments);
}
/**Broadcast the EventListener to listeners after the delay.
* @param target Object
* @param evt String
* @param delay Number
*/
public function dispatchEvent ():String {
return storeMessage ("dispatchEvent", arguments);
}
/**Broadcast the EventListener to listeners after the delay.
* @param target Object
* @param evt String
* @param delay Number
*/
public function broadcastEvent ():String {
return storeMessage ("broadcastEvent", arguments);
}
/**Broadcast the message to listeners after the delay.
* @param target Object
* @param evt String
* @param delay Number
*/
public function broadcastMessage ():String {
return storeMessage ("broadcastMessage", arguments);
}
/**Interrupt the event before the interval.
* @param id String
*/
public function interrupt (id:String) {
var myEvent:Object;
if (id == "all") {
for (var i in events) {
myEvent = events[i];
clearInterval (myEvent.interval);
}
events = new Object ();
return;
}
myEvent = events[id];
if (myEvent == undefined) {
for (var i in events) {
if (events[i].evt == id || events[i].evtType
== id) {
myEvent = events[i];
break;
}
}
}
clearInterval (myEvent.interval);
delete events[id];
}
private function storeMessage (evtType:String, args:Array):String {
//_global.tt ("storeMessage", evtType, args, typeof
(args[0]))
var myEvent:Object = new Object ();
if (typeof (args[0]) != "string") {
var target:Object = args.shift ();
myEvent.target = target;
} else {
myEvent.target = parent;
}
var id:String = evtType + index++;
var evt:String = String (args.shift ());
var delay:Number = Number (args.shift ());
switch (evtType){
case "doRepeat":
myEvent.times = args.shift ();
break;
case "doLoop":
myEvent.times = "unlimited";
break;
default:
myEvent.times = 1;
}
if (evtType.indexOf ("do") == -1) {
//AbstractBroadcaster or EventDispatcher methods
myEvent.evt = evtType;
args.unshift (evt);
} else {
myEvent.evt = evt;
}
myEvent.id = id;
myEvent.evtType = evtType;
myEvent.args = args;
myEvent.delay = delay;
events[id] = myEvent;
myEvent.interval = setInterval (this, "sendMessage", delay,
myEvent);
return id;
}
private function sendMessage (myEvent:Object) {
//_global.tt ("sendMessage", myEvent)
var evtType:String = myEvent.evtType;
var target = myEvent.target;
var evt:String = myEvent.evt;
var args:Array = myEvent.args;
target[evt].apply (target, args);
if (typeof (myEvent.times) == "number") {
myEvent.times--;
if (!myEvent.times) {
clearInterval (myEvent.interval);
delete events[myEvent.id];
}
}
}
}
_______________________________________________
[email protected]
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com