/** * Copyright k3lab ( http://wonderfl.net/user/k3lab ) * MIT License ( http://www.opensource.org/licenses/mit-license.php ) * Downloaded from: http://wonderfl.net/c/i4zJ */ package { import flash.display.*; import flash.events.*; import flash.geom.*; public class LiquidFx extends Sprite { private var main:Sprite; private var sub:Sprite; // private var p:Point; private var p2:Point; // private var _stageW:Number; private var _stageH:Number; // private var mainmask:Sprite; private var submask:Sprite; // private var count:Number; private var _speed:Number; private var a:Number = 0; // private var subGool:Number; private var mainGool:Number; public function LiquidFx(object:DisplayObject,box:Sprite,stageW:Number,stageH:Number,speed:Number = 30) { _stageW = stageW; _stageH = stageH; _speed = speed; p = new Point(object.x, object.y); p2 = new Point(p.x + object.width, p.y + object.height); count = p.x; //表示用スプライト main = Sprite(object); //エフェクト用スプライト var original:BitmapData = new BitmapData(main.width, main.height, true, 0x00000000); original.draw(main); sub = box.addChild(new Sprite()) as Sprite; sub.x = p.x; sub.y = p.y; sub.graphics.beginBitmapFill(original, null, false); sub.graphics.drawRect(0, 0, object.width, object.height); sub.graphics.endFill(); sub.scaleX = 100; //各マスクセット mainmask = new Sprite(); submask = new Sprite(); main.mask = mainmask; sub.mask = submask; } //-------------------------------------------------------------------------- // アニメーションメソッド //-------------------------------------------------------------------------- /** * 左に消える */ public function reverseLeft():void { subGool = 0; mainGool = p2.x; count = p.x; _speed = Math.abs(_speed); addEventListener(Event.ENTER_FRAME, loop); } /** * 右に消える */ public function reverseRight():void { subGool = _stageW; mainGool = p.x; count = p2.x; _speed = Math.abs(_speed) * -1; addEventListener(Event.ENTER_FRAME, loop); } /** * 右から現れる */ public function runRight():void { subGool = _stageW; mainGool = p.x; count = p.x; _speed = Math.abs(_speed); addEventListener(Event.ENTER_FRAME, loop); } /** * 左から現れる */ public function runLeft():void { subGool = 0; mainGool = p2.x; count = p2.x+1;//やっつけ; _speed = Math.abs(_speed) * -1; addEventListener(Event.ENTER_FRAME, loop); } //-------------------------------------------------------------------------- // ループ処理 //-------------------------------------------------------------------------- private function update():void { submask.graphics.clear(); submask.graphics.beginFill(0x0); submask.graphics.moveTo(count, p.y); submask.graphics.lineTo(subGool, p.y); submask.graphics.lineTo(subGool, p2.y); submask.graphics.lineTo(count, p2.y); submask.graphics.lineTo(count, p.y); submask.graphics.endFill(); mainmask.graphics.clear(); mainmask.graphics.beginFill(0x0); mainmask.graphics.moveTo(count, p.y); mainmask.graphics.lineTo(mainGool, p.y); mainmask.graphics.lineTo(mainGool, p2.y); mainmask.graphics.lineTo(count, p2.y); mainmask.graphics.lineTo(count, p.y); mainmask.graphics.endFill(); } private function loop(e:Event):void { _speed += a; count += _speed; sub.x = (p.x - count) * sub.scaleX; update(); if (count > p2.x) { submask.graphics.clear(); removeEventListener(Event.ENTER_FRAME, loop); count = p.x; } } //-------------------------------------------------------------------------- // getter setter //-------------------------------------------------------------------------- public function get stageW():Number { return _stageW; } public function set stageW(value:Number):void { _stageW = value; } public function get stageH():Number { return _stageH; } public function set stageH(value:Number):void { _stageH = value; } public function get speed():Number { return _speed; } public function set speed(value:Number):void { _speed = value; } } }