package { import flash.display.Sprite; import flash.events.Event; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; import org.libspark.swfassist.io.DataInput; import org.libspark.swfassist.io.ByteArrayInputStream; import org.libspark.swfassist.swf.io.ReadingContext; import org.libspark.swfassist.swf.io.SWFReader; import org.libspark.swfassist.swf.structures.SWF; import org.libspark.swfassist.inprogress.swf.AnimationCollector; import org.libspark.swfassist.swf.structures.Shape; import org.libspark.swfassist.flash.display.ShapeDrawer; import org.libspark.swfassist.flash.display.ShapeOutlineDrawer; import org.libspark.swfassist.flash.display.VectorGraphics; import org.libspark.swfassist.flash.display.FlashGraphics; import org.libspark.swfassist.flash.display.PenGraphics; import org.libspark.swfassist.swf.tags.Tags; import flash.utils.getTimer; import flash.text.TextField; [SWF(width=480,height=360,backgroundColor=0xffffff)] public class Demo4 extends Sprite { public function Demo4() { var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.BINARY; loader.addEventListener(Event.COMPLETE, completeHandler); loader.load(new URLRequest('')); } private function completeHandler(e:Event):void { var loader:URLLoader = URLLoader(e.target); _input = new ByteArrayInputStream(loader.data); _context = new ReadingContext(); _reader = new SWFReader(); _swf = new SWF(); _reader.readSWF(_input, _context, _swf, 2000); _t = getTimer(); addChild(new TextField()); addEventListener(Event.ENTER_FRAME, readHandler); } private function readHandler(e:Event):void { var tags:Tags = _swf.tags; TextField(getChildAt(0)).text = tags.numTags.toString(); trace('read<' + tags.numTags + '>'); for (;;) { var l:uint = tags.numTags; _reader.readTags(_input, _context, tags, 1000); if (tags.numTags == l) { removeChildAt(0); removeEventListener(Event.ENTER_FRAME, readHandler); trace('complete'); startAnimation(); break; } if ((getTimer() - _t) > 1000) { _t = getTimer(); break; } } } private function startAnimation():void { stage.frameRate = _swf.header.frameRate; _swf.visit(_animation); addChild(_canvas); addEventListener(Event.ENTER_FRAME, animationHandler); } private function animationHandler(e:Event):void { _animation.drawFrame(_canvas, _drawer, ++_f); } private var _input:ByteArrayInputStream; private var _context:ReadingContext; private var _reader:SWFReader; private var _swf:SWF; private var _t:uint; private var _f:uint = 0; private var _animation:AnimationCollector = new AnimationCollector(); private var _canvas:Sprite = new Sprite(); private var _drawer:ShapeDrawer = new ShapeOutlineDrawer(new FlashGraphics()); } }