root/as3/Astro/ShaderFilter/Mudflow/ScratchCanvas.as

リビジョン 420, 1.8 kB (コミッタ: gyuque, コミット時期: 4 年 前)

moved

Line 
1 package
2 {
3         import flash.display.*;
4         import flash.geom.*;
5         import flash.filters.DisplacementMapFilter;
6
7         public class ScratchCanvas extends Sprite implements ILineCanvas
8         {
9                 private var mBitmapData:BitmapData;
10                 private var mOffscreen:BitmapData;
11                 private var mNoiseBitmapData:BitmapData;
12                 private var mOfsSprite:Sprite;
13                 private var mBitmap:Bitmap;
14                 private var mClearRect:Rectangle;
15                 private var mDFilter:DisplacementMapFilter;
16
17                 function ScratchCanvas(w:int, h:int)
18                 {
19                         setupFilter(w, h);
20                         mBitmapData = new BitmapData(w, h, true, 0);
21                         mOffscreen = new BitmapData(w, h, true, 0);
22                         mBitmap = new Bitmap(mBitmapData);
23                         mOfsSprite = new Sprite();
24
25                         mClearRect = new Rectangle(0, 0, w, h);
26
27                         addChild(mBitmap);
28                 }
29
30                 private function setupFilter(w:int, h:int):void
31                 {
32                         mNoiseBitmapData = new BitmapData(w, h, true);
33                         mNoiseBitmapData.perlinNoise(2,
34                                                                                 2,
35                                                                                 19,
36                                                                                 1,
37                                                                                 false,
38                                                                                 true);
39
40                         mDFilter = new DisplacementMapFilter(mNoiseBitmapData,
41                                 new Point(0, 0),
42                                 2,
43                                 1,
44                                 4,
45                                 4);
46
47                         //mNoiseBitmapData.dispose();
48                 }
49
50                 public function drawLine(x1:Number, y1:Number, x2:Number, y2:Number, c:uint):void
51                 {
52                         var i:int;
53                         mOffscreen.fillRect(mClearRect, 0);
54                         var g:Graphics = mOfsSprite.graphics;
55
56                         for (i = 0;i < 8;i++)
57                         {
58                                 g.clear();
59                                 g.lineStyle(1, c, 0.1);
60                                 g.moveTo(x1 + Math.random()*5-2, y1 + Math.random()*5-2);
61                                 g.lineTo(x2 + Math.random()*5-2, y2 + Math.random()*5-2);
62        
63                                 mOffscreen.draw(mOfsSprite);
64                                 mOffscreen.applyFilter(mOffscreen, mClearRect, new Point(0,0), mDFilter);
65                                 mBitmapData.draw(mOffscreen);
66                         }
67                 }
68         }
69 }
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。