forked from: flash on 2009-8-4

by iong forked from flash on 2009-8-4 (diff: 109)
クリックで増える(5つまで)。負荷は減らし方勉強しないといけません...
♥0 | Line 121 | Modified 2009-08-04 17:34:28 | MIT License
play

ActionScript3 source code

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

// forked from iong's flash on 2009-8-4

// クリックで増える(5つまで)。負荷は減らし方勉強しないといけません...
package
{
	import flash.display.Sprite;
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.BlendMode;
	import flash.filters.BlurFilter;
	import flash.geom.Point;
	import flash.display.DisplayObject;
	import flash.utils.setInterval;
	import flash.utils.clearInterval;

	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.display.Stage;
	import flash.display.StageQuality;
	import flash.display.StageScaleMode;

	[SWF(backgroundColor="#FFFFFF")]

	public class As002 extends Sprite
	{
		private var gS:Sprite;
		private var cv:BitmapData;
		private var cP:Sprite;
		private var mRBlur:BlurFilter;

		private var aryGS:Array = new Array();
		private var arySI:Array = new Array();
		private var aryTP:Array = new Array();
		private var aryPX:Array = new Array();

		// 動作の間隔(ms)
		private var iSI:uint  = 1000;
		// 増やす最大数
		private var iMax:uint = 5;

		public function As002():void
		{
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.quality   = StageQuality.LOW;
			stage.frameRate = 30;

			init();
			act();
		}

		private function init():void
		{
			cv   = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0xffffff);
			cP   = new Sprite();

			makeGroup();

			mRBlur = new BlurFilter(4, 4);

			this.addChild(new Bitmap(cv));
		}

		private function act():void
		{
			stage.addEventListener(MouseEvent.CLICK, makeGroup);
			cP.addEventListener(Event.ENTER_FRAME, onEFPiece);
			this.addEventListener(Event.ENTER_FRAME, onEFRoot);
		}

		// 移動するグループ・設定を作成、動作開始
		private function makeGroup(e:Event=null):void
		{
			var gSP:Sprite = makePiece(Math.round(Math.random()*100));
			var i:uint     = aryGS.length;

			gSP.name= "g"+i;
			cP.addChild(gSP);

			if(i==iMax){
				var target:DisplayObject = cP.getChildAt(0);
				cP.removeChildAt(0);
				target = null;

				clearInterval(arySI[0]);
				aryGS.splice(0,1);
				arySI.splice(0,1);
				aryTP.splice(0,1);
				aryPX.splice(0,1);

				i = aryGS.length;
			}

			aryGS.push(gSP);
			aryTP.push(new Array(0,0));
			aryPX.push(0);
			arySI.push(setInterval(onSI, iSI, i));
		}

		// 動作MC
		private function makePiece(n:uint):Sprite
		{
			var retVal:Sprite = new Sprite();
			var gSP:Sprite;
			for(var i:uint=1; i<=5; i++){
				gSP= new Sprite();
				gSP.name = "gSP"+i;
				gSP.graphics.beginFill(retC(), 0.6);
				gSP.graphics.drawCircle(-n/2, -n/2, n);
				retVal.addChild(gSP);
				gSP.y = n*(i-1);
			}
			retVal.x = Math.round(Math.random()*stage.stageWidth);
			retVal.y = Math.round(Math.random()*stage.stageHeight);
			return retVal;
		}

		// MC移動
		private function movePiece(i:uint):void
		{
			aryGS[i].x += (aryTP[i][0]-aryGS[i].x)*.2;
			aryGS[i].y += (aryTP[i][1]-aryGS[i].y)*.2;
			aryGS[i].rotation += aryGS[i].x-aryPX[i];
			aryPX[i]    = aryGS[i].x;
		}

		private function retC():Number
		{
			var coR:String= (70+Math.round(Math.random()*185)).toString(16);
			var coG:String= (70+Math.round(Math.random()*185)).toString(16);
			var coB:String= (70+Math.round(Math.random()*185)).toString(16);
			return parseInt("0x"+coR+coG+coB, 16)
		}

		private function onSI():void
		{
			aryTP[arguments[0]][0] = Math.round(Math.random()*stage.stageWidth);
			aryTP[arguments[0]][1] = Math.round(Math.random()*stage.stageHeight);
		}

		private function onEFRoot(e:Event):void
		{
			cv.draw(cP, null, null, BlendMode.OVERLAY);
			cv.applyFilter(cv, cv.rect, new Point(), mRBlur);
		}

		private function onEFPiece(e:Event):void
		{
			for(var i:uint=0; i<aryGS.length; i++){
				movePiece(i)
			}
		}
	}

}

Forked