原作者的Github,用starling来实现
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();
}
}
}