加载动画

  1 package {
  2     import flash.display.Sprite;
  3     import flash.events.Event;
  4     import flash.geom.Matrix;
  5     import flash.geom.Point;
  6 
  7     public class LoadMotion extends Sprite {
  8         public static const STYLE_RECT:int = 0;
  9         public static const STYLE_CIRCLE:int = 1;
 10         public static const STYLE_SQUARE:int = 2;
 11         private var _defaultStyle:int = 1;
 12         private var _color:uint = 0;
 13         private var _itemNum:int = 9;
 14         private var _refreshFrame:int = 1;
 15         private var _box:Sprite;
 16 
 17         public function get refreshFrame():int {
 18             return _refreshFrame;
 19         }
 20         private var degree:Number;
 21 
 22         /**
 23          * 刷新间隔的帧数
 24          * @param value
 25          *
 26          */
 27         public function set refreshFrame(value:int):void {
 28             if (value < 1) {
 29                 _refreshFrame = 1;
 30             } else {
 31                 _refreshFrame = value;
 32             }
 33         }
 34         /**
 35          * 转动速度
 36          */
 37         public var rotateSpeed:int = 1;
 38         private var _dir:int = 1;
 39 
 40         /**
 41          *
 42          * @param color
 43          * @param radius 每个子块到中心的距离
 44          * @param maxNum 子块数目
 45          * @param style 子块样式
 46          * @param dir 转动方向
 47          *
 48          */
 49         public function LoadMotion(color:int = 0xffffff, radius:int = 50, itemNum:int = 9, style:int = STYLE_CIRCLE, dir:int = 1) {
 50             _color = color;
 51             _itemNum = itemNum;
 52             _defaultStyle = style;
 53             _dir = dir;
 54             _box = new Sprite();
 55             degree = 360 / _itemNum;
 56             _refreshFrame = Math.ceil(degree / 5);
 57             var factor:Number = 1 / itemNum;
 58 
 59             for (var i:int = 0; i < _itemNum; i++) {
 60                 var item:Sprite = buildItem();
 61                 item.rotation = i * degree * _dir;
 62                 var pt:Point = new Point(radius);
 63                 pt = rotatePoint(item.rotation * Math.PI / 180, pt);
 64                 item.x = pt.x;
 65                 item.y = pt.y;
 66                 var v:Number = factor * i;
 67                 item.alpha = v;
 68                 item.scaleX = item.scaleY = v;
 69                 _box.addChild(item);
 70             }
 71 
 72             _box.cacheAsBitmap = true;
 73             addChild(_box);
 74         }
 75 
 76         private function rotatePoint(radian: Number, pt: Point, center: Point = null):Point {
 77             if (center == null) {
 78                 center = new Point();
 79             }
 80             var matrix:Matrix = new Matrix(1, 0, 0, 1, pt.x - center.x, pt.y - center.y);
 81             matrix.rotate(radian);
 82             return new Point(matrix.tx + center.x, matrix.ty + center.y);
 83         }
 84 
 85         public function start():void {
 86             addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
 87         }
 88 
 89         public function stop():void {
 90             removeEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
 91         }
 92 
 93         private var _counter:int = 0;
 94 
 95         private function onEnterFrameHandler(e: Event):void {
 96             if (_counter % refreshFrame == 0) {
 97                 _box.rotation += _dir * degree * rotateSpeed;
 98                 _counter = 0;
 99             }
100             _counter += 1;
101         }
102 
103         private function buildItem():Sprite {
104             var item:Sprite = new Sprite();
105             item.graphics.beginFill(_color);
106             if (_defaultStyle == STYLE_CIRCLE) {
107                 item.graphics.drawCircle(-5, -5, 10);
108             } else if (_defaultStyle == STYLE_RECT) {
109                 item.graphics.drawRect(-10, -5, 20, 10)
110             } else if (_defaultStyle == STYLE_SQUARE) {
111                 item.graphics.drawRect(-10, -10, 20, 20)
112             }
113             item.graphics.endFill();
114             return item;
115         }
116     }
117 }

 

转载于:https://www.cnblogs.com/gw-north/articles/4707380.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值