Forked from: trick7's わかめペン簡易版 diff:9 forked from: わかめペン簡易版 trick7 forked:0favorite:4lines:90license : All rights reserved modified : 2008-12-24 17:12:06 Embed Tweet // forked from trick7's わかめペン簡易版 // forked from trick7's code on 2008-12-18 package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.BlendMode; import flash.display.Sprite; import flash.filters.ColorMatrixFilter; import flash.filters.ConvolutionFilter; import flash.filters.DisplacementMapFilter; import flash.geom.ColorTransform; import flash.geom.Matrix; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Point; import flash.geom.Rectangle; [SWF(backgroundColor="0x000000", frameRate="60")] public class WakamePenWonderFl extends Sprite{ private var _sp:Sprite; private var _drawingBoard:Sprite; private var _drawingStockBMD:BitmapData; private var _drawingStock:Bitmap; private var _baseBmpd:BitmapData; private var _viewBm:Bitmap; private var _displaceImage:BitmapData; private var _clrMatrix:ColorMatrixFilter; private var _seed:Number = Math.random(); private var _offsets:Array = [new Point(), new Point()]; private var _mousedown:Boolean = false; public function WakamePenWonderFl() { _sp = new Sprite(); _drawingBoard = new Sprite(); //ペンの太さと初期色 _drawingBoard.graphics.lineStyle(5, 0x00ffffff); addChild(_sp); addEventListener(Event.ENTER_FRAME, run); stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDownListener); stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUpListener); //描画スプライトのストック用ビットマップ。背景はアルファ0 _drawingStockBMD = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0x00000000); _drawingStock = new Bitmap(_drawingStockBMD); _sp.addChild(_drawingStock) _sp.addChild(_drawingBoard); //表示用bitmap _baseBmpd = new BitmapData(stage.stageWidth, stage.stageHeight, false, 0xff000000); _viewBm = new Bitmap(_baseBmpd,"auto",true); _viewBm.blendMode = BlendMode.SCREEN; addChild(_viewBm); _displaceImage = new BitmapData(stage.stageWidth, stage.stageHeight, false, 0xFFFFFFFF); //消去ボタン var btn:Sprite = new Sprite(); btn.graphics.beginFill(0x999999); btn.graphics.drawCircle(20, 20, 15); btn.buttonMode = true; addChild(btn); btn.addEventListener(MouseEvent.CLICK, onEraceListener); } private function run(e:Event):void { if (_mousedown) { _drawingBoard.graphics.lineStyle(5,Math.random()*0xffffff) _drawingBoard.graphics.lineTo(mouseX, mouseY); } //置き換えマップを動かす。 for(var i:int = 0; i < 2; ++i){ _offsets[i].x += int(Math.random()*50); //X方向 _offsets[i].y += int(Math.random()*50); //Y方向 } //もやもやした白黒画像を生成 _displaceImage.perlinNoise(300, 300, 1, _seed, false, true, 1, true, _offsets); var f:DisplacementMapFilter = new DisplacementMapFilter(_displaceImage, null, 1, 1, 10, 20, "color", 0x0); //displacementMapFilter _baseBmpd.applyFilter(_baseBmpd,new Rectangle(0,0,_baseBmpd.width,_baseBmpd.height),new Point(0,0),f); //convolutionFilter _baseBmpd.applyFilter(_baseBmpd,new Rectangle(0,0,_baseBmpd.width,_baseBmpd.height),new Point(0,0),set_cf()); //描画(ここをコメントアウトするとわかめフィルタ効果をオフにできる。完全に切るときは上の該当処理も消すこと。) _baseBmpd.draw(_sp); } private function set_cf():ConvolutionFilter{//ConvolutionFilter var m1:Number = 0; var m2:Number = 0; var m3:Number = 0; var m4:Number = 0; var m5:Number = 0; var m6:Number = 0; var m7:Number = 0; var m8:Number = 0; var m9:Number = 0; var ma:Number = 1; var mt:Number = m1 + m2 +m3 + m4 +m5 + m6 +m7 + m8 +m9 + ma; var cf:ConvolutionFilter = new ConvolutionFilter(0,0, [m1,m2,m3, m4,m5,m6, m7,m8,m9 ],mt,0,false); return cf; } private function onMouseDownListener(event:MouseEvent):void { _mousedown = true; //ペン先を移動。+1しているのは点が描けるようにする処理 _drawingBoard.graphics.moveTo(mouseX, mouseY+1 ); } private function onMouseUpListener(event:MouseEvent):void { _mousedown = false; //lineTo で描画されたグラフィックをキャプチャ _drawingStockBMD.draw(_drawingBoard); //キャプチャ後、ラインは不要なのでクリアしておく _drawingBoard.graphics.clear(); } private function onEraceListener(event:MouseEvent):void { //キャプチャ用ビットマップをクリア _drawingStockBMD.fillRect(new Rectangle(0,0,stage.stageWidth, stage.stageHeight),0x000000); _drawingBoard.graphics.clear(); } } } Code Fullscreen Preview Fullscreen fallen nilab Laqu tenchiwang2 : 超炫的線條效果Good 超炫的線條效果 DisplacementMapFilter MouseEvent mouseY mouseX Rectangle buttonMode width height addChild blendMode MouseEvent.MOUSE_UP MouseEvent.CLICK MouseEvent.MOUSE_DOWN MouseEvent.ENTER_FRAME addEventListener Boolean Math.random Array int Sprite