基于Starling的loading原件

1 篇文章 0 订阅
0 篇文章 0 订阅

原作者的Github,用starling来实现

跟里面的方块loading一样


package com.czqsoft.loading
{
	import starling.core.Starling;
	import starling.display.Quad;
	import starling.display.Sprite;
	import starling.events.Event;
	
	public class LoadingSprite extends Sprite
	{
		private static const quad_count:int = 5;
		
		private var _quads:Vector.<Quad>;
		private var _frameRate:Number = 30;
		private var _frame:int = 0;
		
		private var _size:Number = 4;
		private var _color:uint = 0x000000;
		
		private var _isAnimation:Boolean = false;
		
		public function LoadingSprite()
		{
			super();
			initQuads();
		}
		
		private function initQuads():void
		{
			this._quads = new Vector.<Quad>;
			for (var i:int = 0; i < quad_count; i++){
				var quad:Quad = new Quad(_size, _size * 2, _color);
				_quads.unshift(quad);
				this.addChild(quad);
				quad.x = 0 + (i - quad_count / 2) * (quad.width * 1.5);
				quad.pivotX = quad.width >> 1;
				quad.pivotY = quad.height >> 1;
			}
		}
		
		private function loadingSprite_EnterFrameHandler(e:Event):void
		{
			_frame ++;
			_frame = _frame % _frameRate;
			for (var i:int = 0; i < quad_count; i++){
				var quad:Quad = this._quads[i];
				var basestep:Number = 1 / quad_count * i;
				var quadFrame:Number = _frame / _frameRate + basestep;
				quad.scaleY = getScaleY(quadFrame);
			}
		}
		
		/**
		 *  
		 * @param ratio (0~1)
		 * 
		 */		
		public function setRatio(ratio:Number):void
		{
			var num_scale:int = Math.floor(ratio * quad_count);
			if (num_scale > quad_count) num_scale = quad_count;
			if (num_scale < 0) num_scale = 0;
			for (var i:int = 0; i < quad_count; i++){
				var quad:Quad = this._quads[i];
				if (i <= num_scale)
				{
					quad.scaleY = 3;
				}
				else
				{
					quad.scaleY = 1;
				}
			}
		}
		
		private function getScaleY(t:Number):Number
		{
			while (t > 1) 
			{
				t -= 1;
			}
			if (t > 0 && t <= 0.2){
				return 1 + t / 0.2 * 2;
			}
			
			if (t > 0.2 && t <= 0.5){
				return 1 + (0.5 - t) / 0.3 * 2;
			}
			return 1;
		}
		
		public function start():void
		{
			this._isAnimation = true;
			addEventListener(Event.ENTER_FRAME, loadingSprite_EnterFrameHandler);
		}
		
		public function stop():void
		{
			if (!this._isAnimation) return;
			this._isAnimation = false;
			this.removeEventListener(Event.ENTER_FRAME, loadingSprite_EnterFrameHandler);	
		}
		
		override public function dispose():void
		{
			this.stop();
			this._quads = null;
			super.dispose();
		}
		
	}
}



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值