虫 (bug)

by iong
※ 虫嫌い注意
click center button
♥0 | Line 211 | Modified 2010-04-06 14:05:33 | 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/tkEk
 */

/*
	※ 虫嫌い注意
	click center button
*/
package{

	import flash.display.Sprite;

	[SWF(width="465", height="465", backgroundColor="#ffffff", frameRate="30")]

	public class BugBug extends Sprite
	{
		import flash.display.Bitmap;
		import flash.display.BitmapData;
		import flash.events.Event;
		import flash.events.MouseEvent;
		import flash.display.BlendMode;

		private var cv:BitmapData;
		private var cvR:Sprite    = new Sprite();

		private var btn:Sprite    = new Sprite();
		private var objBug:Object = new Object();
		private var aryP:Array    = new Array();
		public var sS:setBug     = new setBug();
		private var bugCnt:uint   = 0;

		import flash.display.StageAlign;
		import flash.display.StageQuality;
		import flash.display.StageScaleMode;

		// size
		public var intS:Number;
		// growth speed
		public var intGrow:Number;
		// speed
		public var intSpeed:Number;
		// life count
		public var intLife:Number;

		public function BugBug():void
		{
			stage.quality   = StageQuality.LOW;
			stage.align     = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;

			cvR = new Sprite();
			cvR.cacheAsBitmap= true;

			cv = new BitmapData(stage.stageWidth, stage.stageHeight, false, 0x000000);
			addChild(new Bitmap(cv));
			addChild(cvR);

			// add button
			addChild(btn = atcBtn());
			btn.x = stage.stageWidth/2;
			btn.y = stage.stageHeight/2;

			// act start
			addEventListener(Event.ENTER_FRAME, actAll);
		}

		private function atcBtn():Sprite
		{
			var retVal:Sprite = new makeBtn();
			retVal.addEventListener(MouseEvent.MOUSE_DOWN, clickBtnDown);
			retVal.addEventListener(MouseEvent.MOUSE_UP,   clickBtnUp);
			return retVal;
		}

		private function clickBtnDown(e:MouseEvent):void
		{
			e.target.rotation = 180;
			e.target.x+=1;
			e.target.y+=1;
			atcBug();
		}
		private function clickBtnUp(e:MouseEvent):void
		{
			e.target.rotation = 0;
			e.target.x-=1
			e.target.y-=1;
		}

		private function atcBug():void
		{
			var tS:Sprite = new makeBug();
			tS.name       = "bug"+bugCnt;
			bugCnt++;

			// sprite init
			var iX:uint   = Math.round(Math.random()*stage.stageWidth);
			var iY:uint   = Math.round(Math.random()*stage.stageHeight);
			aryP.push(sS.init(tS, iX, iY));

			cvR.addChild(tS);
		}

		// main action
		private function actAll(e:Event):void
		{
			for(var i:int=0; i<aryP.length; i++){
				var flgLife:Boolean = sS.update(aryP[i], stage.stageWidth, stage.stageHeight);

				// dead
				if(!flgLife){
					aryP[i].target.alpha-=0.1;
					if(aryP[i].target.alpha<=0){
						cvR.removeChildAt(i);
						aryP.splice(i,1);
					}

				}else{
				}
			}
            cv.draw(cvR, null, null, BlendMode.DIFFERENCE);
		}
	}
}

import flash.display.Sprite;
import flash.display.Stage;
import flash.geom.Matrix;
import flash.display.GradientType;
import flash.display.SpreadMethod;
import flash.filters.BlurFilter;
// make bug
class makeBug extends Sprite
{
	public function makeBug():void
	{
		var bg:Sprite     = new Sprite();
		var eye1:Sprite   = new Sprite();
		var eye2:Sprite   = new Sprite();

		var aryGC:Array = [0x000000, 0x000000];
		var aryGA:Array = [1, 0];
		var aryGR:Array = [0, 0xff];
		var matG:Matrix = new Matrix();
		matG.createGradientBox(32, 32, 0, 0,0);
		with(bg.graphics){
			beginGradientFill(GradientType.RADIAL, aryGC, aryGA, aryGR, matG, SpreadMethod.PAD, "rgb", 1);
			drawCircle(0, 0, 32);
			endFill();
		}
		bg.scaleY= 0.5;

		with(eye1.graphics){
			beginFill(0xcc0000);
			drawCircle(0, 0, 2);
			endFill();
		}
		with(eye2.graphics){
			beginFill(0xcc0000);
			drawCircle(0, 0, 2);
			endFill();
		}
		bg.x  -= 16;
		bg.y  -= 6;
		eye1.x = 12;
		eye2.x = 12;
		eye1.y = 3;
		eye2.y = -3;

		addChild(bg);
		addChild(eye1);
		addChild(eye2);
	}
}

// setting bugs
class setBug
{
	public function setBug()
	{
	}

	// mc setting
	public function init(_sp:Sprite, tX:Number, tY:Number):Object
	{
		var tmpS:Number = Math.max(0.4, Math.round(Math.random() * 120)/100);
		var retVal:Object= new Object();
		retVal = {
			 intS     : tmpS
			,intGrow  : Math.max(0.1, Math.round(Math.random() * 3)/10)
			,intSpeed : Math.round(6  * (120/tmpS))
			,intLife  : Math.max(200, Math.round(Math.random() * 400))
			,intLifeN : 0
			,intRot   : -90
			,intRC    : 0
			,intRCM   : Math.round(Math.random()*2)+1
			,intMx    : 0
			,intMy    : 0
			,target   : _sp
		};
		_sp.x = tX;
		_sp.y = tY;
		return retVal;
	}

	// mc update
	public function update(obj:Object, sW:Number, sH:Number):Boolean
	{
		if(obj.intLife>obj.intLifeN){
			var sp:Sprite = obj.target;
	
			if(obj.intRC<=0){
				var flgR:uint = Math.round(Math.random()*5);
				var intAddR:int= 0;
				if(flgR==0) intAddR = 1;
				if(flgR==1) intAddR =-1;
				obj.intRC= obj.intRCM;
			}else obj.intRC--;
			obj.intRot  += (intAddR * 12);
			obj.intMx    = Math.cos(obj.intRot * Math.PI / 180) * obj.intSpeed;
			obj.intMy    = Math.sin(obj.intRot * Math.PI / 180) * obj.intSpeed;
			obj.intSpeed = Math.round(12  * (1.2/sp.scaleX));
			
			sp.x       += obj.intMx;
			sp.y       += obj.intMy;
			sp.rotation = obj.intRot;
			sp.scaleX  += obj.intGrow * 0.05;
			sp.scaleY  += obj.intGrow * 0.05;
			
			// loop stage
			if(sp.x < 0)  sp.x = sW;
			if(sp.y < 0)  sp.y = sH;
			if(sp.x > sW) sp.x = 0;
			if(sp.y > sH) sp.y = 0;
			
			// life count
			obj.intLifeN += 1;
			return true;
		}else{
			return false;
		}
	}
}

// make button
class makeBtn extends Sprite
{
	public function makeBtn():void
	{
		var sB:Sprite = new Sprite();

		// btn
		with(sB.graphics){
			// body
			beginFill(0x808080,1);
			drawRoundRect(-14,-8, 28,16, 4);
			endFill();

			// light
			lineStyle(1,0xffffff,0.5);
			moveTo(-13,-7);
			lineTo(13,-7);
			lineTo(13,7);
			endFill();

			// dark
			lineStyle(1,0x000000,0.4);
			moveTo(-13,-6);
			lineTo(-13,7);
			lineTo(13,6);
			endFill();
		}

		addChild(sB);
	}
}