BlurFilter Animation (with Math.sin modulation)

by 883108
♥0 | Line 37 | Modified 2010-03-05 05:07:52 | MIT License
play

ActionScript3 source code

/**
 * Copyright 883108 ( http://wonderfl.net/user/883108 )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/xQxK
 */

package {
	import flash.display.*;
	import flash.net.*;
	import flash.system.*;
	import flash.events.*;
	import flash.geom.*;
	import flash.text.*;
	import flash.filters.*;

	public class FilterAnimationDocument extends Sprite {
		private var _sprite:Sprite;
		private var _angle:Number = 0;
		private var _speed:Number = 10;
		
		public function FilterAnimationDocument() {
			init();
		}

		private function init():void {
			var tex:TextField = new TextField  ;
			addChild(tex);
			tex.width = 450;
			tex.x = tex.y = 10;
			tex.multiline = true;
			tex.text = 
				'フィルタをフレーム毎に適用してアニメーションさせます。\n' + 
				'for文を使わず、サイン値を利用して変調させた値を元に\nフィルタを連続的に適用しています。';
			// フィルタを適用するスプライトを作成します。
			var size:Number = 200;
			addChild(_sprite = new Sprite);
			_sprite.graphics.beginFill(0xd90028);
			_sprite.graphics.drawRect(stage.stageWidth / 2 - size / 2, stage.stageHeight / 2 - size / 2, size, size);
			//  ENTER_FRAMEにハンドルを割り当てます。
			_sprite.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
		}
		
		private function enterFrameHandler($event:Event):void{
			// 角度を速度分加算してサイン値を求めます。
			// サイン値は周期的に-1から1までの間で変調を繰り返すので、
			// サイン値に1を足した数を2で割り、周期を0から1に変換した値、
			// サイン値を使用してフィルタを適用します。
			_angle += _speed;
			var ratio:Number = (Math.sin(_angle * Math.PI / 180) + 1 )/ 2;
			_sprite.filters = [new BlurFilter(ratio * 20, ratio * 20, 3)];
			
		}
	}
}