DoAnimation hello 2009!! northprint forked:1favorite:2lines:106license : All rights reserved modified : 2009-01-12 17:34:27 Embed Tweet // write as3 code here.. //hello 2009!! package { import flash.display.*; import flash.events.Event import jp.progression.commands.*; import flash.net.URLLoader; import flash.net.URLRequest; import flash.system.Security; [SWF(backgroundColor="#000000")] public class CreateCow extends MovieClip{ private var _loader:URLLoader; private var _sp:Sprite; public function CreateCow(){ _sp= new Sprite(); _sp.graphics.beginFill(0xff0000); _sp.graphics.drawCircle(0, 0, 5); _sp.graphics.endFill(); Security.loadPolicyFile("http://narayama.heteml.jp/crossdomain.xml"); _loader = new URLLoader(); _loader.addEventListener(Event.COMPLETE,LoadHandler); _loader.load(new URLRequest("http://narayama.heteml.jp/test/cow.xml")); } private function LoadHandler(e:Event):void{ var sList:SerialList = new SerialList(); sList.addCommand( new AddChild(this, _sp), new DoAnimation(this, new XML(e.target.data), _sp, true), new RemoveChild(this, _sp) ); sList.execute(); } } } import flash.display.DisplayObject; import flash.display.DisplayObjectContainer; import flash.display.Sprite; import flash.events.Event; import flash.geom.Point; import jp.progression.commands.*; import jp.progression.core.commands.Command; class DoAnimation extends Command { private var _motionXml:XML; private var _moveObject:DisplayObject; private var _waitForComplete:Boolean; private var _keyframeCount:int = 0; private var _keyframeLength:int = 0; private var _canvas:Sprite = new Sprite(); private var _container:DisplayObjectContainer; private var _startPoint:Point; private var _ns:Namespace; /*======================================================================*//** * コンストラクタ */ public function DoAnimation(container:DisplayObjectContainer, motionXml:XML, moveObject:DisplayObject, waitForComplete:Boolean = false, initObject:Object = null ) { super( _execute, _interrupt, initObject ); _motionXml = motionXml; _container = container; _moveObject = moveObject; _waitForComplete = waitForComplete; } private function parseXML(xml:XML = null):void { _ns = new Namespace("fl.motion.*"); _startPoint = new Point(); _startPoint.x = xml._ns::source._ns::Source.@x; _startPoint.y = xml._ns::source._ns::Source.@y; _moveObject.x = _startPoint.x; _moveObject.y = _startPoint.y; _keyframeLength = int(xml.@duration); } private function _execute():void { timeOut = 0; //xmlパース parseXML(_motionXml); _container.addChild(_canvas); _canvas.graphics.lineStyle(2, 0x0000ff); _canvas.graphics.moveTo(_moveObject.x, _moveObject.y); //EnterFlame _keyframeCount = 1; _moveObject.addEventListener(Event.ENTER_FRAME, EnterframeHandler); // 通常処理を終了します。 if (_waitForComplete == false) { executeComplete(); } } private function EnterframeHandler(e:Event):void { _keyframeCount ++; var newPoint:Point = new Point(); newPoint.x = Number(_motionXml._ns::Keyframe[_keyframeCount].@x); newPoint.y = Number(_motionXml._ns::Keyframe[_keyframeCount].@y); if (newPoint.x!=0){ _moveObject.x = _startPoint.x + newPoint.x; } if (newPoint.y!=0){ _moveObject.y = _startPoint.y + newPoint.y; } _canvas.graphics.lineTo(_moveObject.x, _moveObject.y); if (_keyframeCount == (_keyframeLength - 1)) { _moveObject.removeEventListener(Event.ENTER_FRAME, EnterframeHandler); if (_waitForComplete) { executeComplete(); } } } /*======================================================================*//** * 中断実行されるコマンドの実装です。 */ private function _interrupt():void { if (_keyframeCount > 1) { _moveObject.removeEventListener(Event.ENTER_FRAME, EnterframeHandler); } // 中断処理を終了します。 interruptComplete(); } /*======================================================================*//** * MyCommand インスタンスのコピーを作成して、各プロパティの値を元のプロパティの値と一致するように設定します。 */ public override function clone():Command { return new DoAnimation( _container, _motionXml, _moveObject, _waitForComplete, this ); } } Code Fullscreen Preview Fullscreen hacker_r9s92.. carbonhci : 特效画板算法 特效 画板 算法 XML waitForComplete container executeComplete Namespace SerialList Command removeEventListener RemoveChild AddChild timeOut addCommand interruptComplete execute data clone Security.loadPolicyFile Boolean addEventListener Object sort new page view favorite forked pv547 forked from: DoAnimation sr_forest forked:1 favorite:0lines:106 (diff:1)