ActionScript Learning 110115

1.15.2011

BitmapDataを使った残像の表現。

残像の表現をBitmapDataを使って作成する。

BitmapDataをdrawするときに効果を追加していくのがポイント。
マウスダウンでラインの太さが変化します。

SAMPLE VIEW CODE


package {
	
	import flash.display.*;
	import flash.events.*	
    import flash.filters.*; 
    import flash.geom.*; 
	
	import frocessing.color.*;


	public class NMain extends MovieClip {
		
		//-------------------------------------------------------------------------------- Properties

		private var _this:*;
		private var _stage:Stage;
		
		
		//-------------------------------------------------------------------------------- Constractor
		
		public function NMain() {
			
			_this = this;
			_stage = stage;
			
			_stage.scaleMode = StageScaleMode.NO_SCALE;
			_stage.align = StageAlign.TOP_LEFT;
			
			Init();
		}
		
		
		//-------------------------------------------------------------------------------- Function
		 
		/**
		 * initialize
		 */
		public function Init():void {

			initmain();
		}
		
		/**
		 * initialize main
		 */
		private var _main:MovieClip;
		private var _canvas:BitmapData;
		private var _line:MovieClip;
		private var colorhsv:ColorHSV;
		private var colcnt:int;
		private var addpnt:Point;
		private var lastpnt:Point;
		private var mdown:Boolean;
		
		private function initmain():void {
			
			_main = new MovieClip();
			_canvas = new BitmapData(_stage.stageWidth, _stage.stageHeight, true, 0x000000);
			
			_this.addChild(new Bitmap(_canvas));
			_this.addChild(_main);
			
			colorhsv = new ColorHSV();
			colcnt = 0;
			colorhsv.s = .6;
		
			addpnt = new Point();
			addpnt.x = Math.round(_stage.stageWidth / 2);
			addpnt.y = Math.round(_stage.stageHeight / 2);
			
			lastpnt = new Point();
			lastpnt.x = addpnt.x;
			lastpnt.y = addpnt.y;
			
			_line = new line();			
			_main.addChild(_line);

			_this.addEventListener(Event.ENTER_FRAME, main_enterframe);
			_this.addEventListener(Event.ENTER_FRAME, main_enterframe_2);
			
			linesize = linesize_min;
			
			_stage.addEventListener(MouseEvent.MOUSE_DOWN, function(){mdown = true});
			_stage.addEventListener(MouseEvent.MOUSE_UP, function(){mdown = false});
		}
		/** */
		private var linesize_min:Number= 20;
		private var linesize_max:Number= 160;
		private var linesize:Number = linesize_min;
		private var blurval:Number;
		private var alphaval:Number;
		
		private function main_enterframe(eo:* = null):void {
			
			if(mdown) {
				
				linesize += (linesize_max - linesize) * .02;
				blurval = 4;
				alphaval = 1;
			}
			else {
				
				linesize += (linesize_min - linesize) * .1;
				blurval = 10;
				alphaval = .99;
			}

			colorhsv.h = colcnt;
			

			
            addpnt.x +=  (_main.mouseX - addpnt.x) * .4; 
            addpnt.y +=  (_main.mouseY - addpnt.y) * .4;
			
			var currentpnt = new Point();
			
			currentpnt.x = addpnt.x;
			currentpnt.y = addpnt.y;
			
			_line.Draw(colorhsv.value, linesize, currentpnt, lastpnt);
			
			lastpnt = currentpnt;	
			
			
			_canvas.lock();
			_canvas.applyFilter( _canvas, _canvas.rect, new Point(), new BlurFilter(blurval, blurval, 1)); 
			_canvas.colorTransform(_canvas.rect, new ColorTransform(1, 1, 1, alphaval, 0, 0, 0, 0)); 			
			_canvas.draw(_main, null, null);			
			_canvas.unlock();
			
		}
		/** */
		private function main_enterframe_2(eo:* = null):void {
			
			colcnt += 1;
			if(colcnt > 360) colcnt -= 360;
		}
	}
}




package {
	
	import flash.display.*;
	import flash.events.*
	import flash.geom.*;


	public class line extends MovieClip {
		
		//-------------------------------------------------------------------------------- Properties

		private var _this:*;
		
		
		//-------------------------------------------------------------------------------- Constractor
		
		public function line() {
			
			_this = this;
		}
		
		
		//-------------------------------------------------------------------------------- Function
		 
		/**
		 * draw
		 */
		public function Draw(col:uint, linesize:Number, currentpnt:Point, lastpnt:Point):void {
			
			var g = _this.graphics;
			
			g.clear();
			
			g.beginFill(col, 1);
			g.drawCircle(currentpnt.x, currentpnt.y, linesize / 2);
			g.endFill();
			
			g.lineStyle(linesize, col);
			g.moveTo(currentpnt.x, currentpnt.y);			
			g.lineTo(lastpnt.x, lastpnt.y);
		}
	}
}



category : ActionScript / Flash

Demonstrations

Feature Samples

Author

虹村 マキオウ (nizimura makiou)

猫と太極拳を愛する横浜在住のフリーランスクリエイターです。

logo

Demo and Sample

Category