运行效果:
下面是代码:
package branch.matrixtest { import flash.display.Sprite; import flash.geom.Matrix; import junlas.toolutil.Attach; /** * @author */ public class ApplyMatrixUI { private var _pmc : Sprite; private var _ui : Sprite; private var _originalW : Number=0; private var _originalH : Number = 0; // private var _isCounterClock : Boolean = true; private var _isLable1 : Boolean = false; private var _isLable2 : Boolean = false; private var _numA:Number=200; private var _numB : Number = -20; public function ApplyMatrixUI(pmc : Sprite) { _pmc = pmc; initDisplay(); initMultiMovie(); } private function initDisplay() : void { _ui = Attach.getSprite("UIShowResult"); _pmc.addChild(_ui); _ui.visible = false; _ui.x= Root.STAGE_WIGHT/2; _ui.y = Root.STAGE_HEIGHT/2; } private function initMultiMovie() : void { _originalW = _ui.width; _originalH = _ui.height; } /** * Enter_Frame事件的run方法 */ public function runMatrix() : void { if(_isCounterClock) { if(_numA == 0 && _numB == -320){//中间判断 _isLable1 = true; } _numA -= 10; if(_isLable1){ _numB += 15; }else{ _numB -= 15; } if(_numA == -200 && _numB == -20){//逆时针的终点位置 _isCounterClock = false; _isLable1 = false; } }else{ if(_numA == 0 && _numB == -320){//中间判断 _isLable2 = true; } _numA += 10; if(_isLable2){ _numB += 15; }else{ _numB -= 15; } if(_numA == 200 && _numB == -20){//顺时针的终点位置 _isCounterClock = true; _isLable2 = false; } } applyMatrix(_numA,_numB,-150,200); } private function applyMatrix(a : Number,b : Number,c : Number,d : Number):void{ _ui.visible = true; var mat : Matrix = new Matrix(); mat.translate(_ui.x,_ui.y); mat.a = a / _originalW; mat.d = d / _originalH; mat.b = b / _originalW; mat.c = c / _originalH; _ui.transform.matrix = mat; } } }