Нет, моя. Но оно в целом нормально работает. Повторяю, эти вот три
бага вспылил вдруг и "лечатся" одним методом. Поэтому и думаю, что что-
то сломалось в плеере. Вот код на всякий случай:
package com.inreflected.utils
{
import flash.events.Event;
import flash.display.Shape;
/**
* @author Pavel fljot
*/
public class DelayUtils
{
private static var _callLaterDispatcher:Shape;
private static var _callLaterQueue:Array/* of CallLaterData*/ = [];
//TODO: several options in case this call in is the queue:
//overwrite, add or ignore
public static function callLater(func:Function, args:Array = null,
delayFramesCount:uint = 1):void
{
if (!_callLaterDispatcher)
{
_callLaterDispatcher = new Shape();
}
if (delayFramesCount > 0)
{
_callLaterQueue.push(new CallLaterData(func, args,
delayFramesCount));
_callLaterDispatcher.addEventListener(Event.ENTER_FRAME,
callLaterDispatcher_enterFrameHandler);
}
}
private static function
callLaterDispatcher_enterFrameHandler(event:Event):void
{
var callLaterData:CallLaterData;
for (var i:int = _callLaterQueue.length - 1; i >= 0; i--)
{
callLaterData = _callLaterQueue[i] as CallLaterData;
if (--callLaterData.delayFramesCount == 0)
{
_callLaterQueue.splice(_callLaterQueue.indexOf(callLaterData), 1);
callLaterData.func.apply(null, callLaterData.args);
}
}
if (_callLaterQueue.length == 0)
{
_callLaterDispatcher.removeEventListener(Event.ENTER_FRAME,
callLaterDispatcher_enterFrameHandler);
}
}
}
}
class CallLaterData extends Object
{
public var func:Function;
public var args:Array;
public var delayFramesCount:uint;
public function CallLaterData(func:Function, args:Array,
delayFramesCount:uint)
{
this.func = func;
this.args = args;
this.delayFramesCount = delayFramesCount;
}
}