package { import caurina.transitions.Tweener; import com.rails2u.utils.ColorUtil; import com.rails2u.utils.DrawUtil; import com.rails2u.utils.MathUtil; import flash.display.Shape; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Point; [SWF(frameRate=60, background=0x555555)] public class MouseMoveTween extends Sprite { public function MouseMoveTween() { stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; addEventListener(Event.ENTER_FRAME, function(e:Event):void { this.rotation += 1; }); stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); } private function onMouseMove(e:Event):void { var nowPoint:Point = new Point(stage.mouseX, stage.mouseY); if (mPoint) { if (Math.abs(Point.distance(nowPoint, mPoint)) > moveThreshold) { createStar(nowPoint, mPoint); mPoint = nowPoint; } } else { mPoint = nowPoint; } } private var mPoint:Point; private var lifetime:Number = 3; private var starSize:uint = 10; private var moveThreshold:Number = 5; public function createStar(p1:Point, p2:Point):void { var sprite:Sprite = new Sprite(); var shape:Shape = new Shape(); sprite.x = p2.x + (p1.x - p2.x) * -2 * Math.random(); sprite.y = p2.y + (p1.y - p2.y) * -2 * Math.random(); sprite.alpha = 0.8; shape.graphics.beginFill(ColorUtil.random(128,128,128)); DrawUtil.drawStar(shape.graphics, 0,0, 5,starSize,starSize * 2.5, 'curve'); sprite.addChild(shape); addChild(sprite); Tweener.addTween(shape, { time:lifetime, _scale:0, onComplete:function():void { removeChild(sprite); sprite = null; }, transition:'easyInBounce' }); Tweener.addTween(shape, { time:lifetime, rotation: MathUtil.randomBetween(360, 1080), x:(p1.x - p2.x) * 50 - moveThreshold * MathUtil.randomBetween(4, 10), y:(p1.y - p2.y) * 50 - moveThreshold * MathUtil.randomBetween(4, 10), transition:'linear' }); } } }