root/as3/Astro/ShaderFilter/RasterScroll/RasterScroll.as

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

imported

Line 
1 package
2 {
3         import flash.display.*;
4         import flash.utils.*;
5         import flash.events.*;
6         import flash.filters.ShaderFilter;
7         import flash.geom.*;
8
9         public class RasterScroll extends Sprite
10         {
11                 [Embed(source="shader/rasterscroll.pbj", mimeType="application/octet-stream")]
12                 private var ShaderBC:Class; // ByteArray
13
14                 [Embed(source="testimage.png", mimeType="image/png")]
15                 private var TestBmp:Class; // BitmapData
16
17                 private var mRSShader:Shader;
18                 private var mRSFilter:ShaderFilter;
19
20                 private var mCount:int;
21
22                 private var mOutBitmapData:BitmapData;
23                 private var mOutBitmap:Bitmap;
24                 private var mClearRect:Rectangle;
25
26                 private var mSrcBitmap:Bitmap;
27
28                 function RasterScroll()
29                 {
30                         var bc:ByteArray = new ShaderBC();
31                         mRSShader = new Shader(bc);
32
33                         mRSFilter = new ShaderFilter();
34                         mRSFilter.shader = mRSShader;
35                         mRSShader.data.wavelen_y.value = [40];
36
37                         mSrcBitmap = new TestBmp();
38
39                         mOutBitmapData = new BitmapData(256, 256, true);
40                         mClearRect  = new Rectangle(0, 0, 256, 256);
41                         mOutBitmap = new Bitmap(mOutBitmapData);
42
43                         addChild(mOutBitmap);
44                         mCount = 30;
45                         addEventListener(Event.ENTER_FRAME, onEnterFrame);
46                         stage.addEventListener(MouseEvent.CLICK, onClick);
47                 }
48
49                 private function onClick(e:MouseEvent):void
50                 {
51                         mCount = 30;
52                         mRSShader.data.wavelen_y.value = [20 + mouseY];
53                 }
54
55                 private function onEnterFrame(e:Event):void
56                 {
57                         if (mCount == 0)
58                                 return;
59
60                         mCount--;
61
62                         var shdata:ShaderData = mRSShader.data;
63                         shdata.amp_x.value = [0];
64                         shdata.amp_y.value = [mCount*2.0];
65                         shdata.phase_y.value = [mCount * 0.3]
66
67                         mOutBitmapData.fillRect(mClearRect, 0);
68                         mOutBitmapData.applyFilter(mSrcBitmap.bitmapData, mClearRect, new Point(0,0), mRSFilter);
69                 }
70         }
71 }
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。