メイン コーダーズルーム【スクリプト系】 「クリックすると波紋が広がるスクリプト」を改造したい | 投稿するにはまず登録を |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
ZUN.jp | Åê¹ÆNo.41257 投稿日時: 2009-1-17 20:36 |
新米 居住地: 東京都 投稿: 11
使用環境:
Home,7.2 |
「クリックすると波紋が広がるスクリプト」を改造したい 他人から貰ったスクリプトなのですが……。
以下のスクリプトは、「ライブラリに識別子"surface"を書き出した256*256サイズのビットマップ」をクリックすると波紋が広がるスクリプトです。(フレームアクションにこれを置くとできます。ただしFlash8以上必須です) このスクリプトを ・ビットマップ無しで動く ・一番上のレイヤーのフレームに置くことで、それ以下のレイヤーのモノ(Flashで描いたベクターデータでも読み込んだビットマップデータでも)に波紋が出るようにしたい のですが、どのようにすればいいのでしょう? ASに関してはほぼ初心者同然なので、さっぱりです。よろしければご教授願います。 import flash.display.*; import flash.filters.*; import flash.geom.*; var damper: BitmapData = new BitmapData( 128, 128, false, 0x80 ); var result: BitmapData = new BitmapData( 128, 128, false, 0x80 ); var result2: BitmapData = new BitmapData( 256, 256, false, 0x80 ); var source: BitmapData = new BitmapData( 128, 128, false, 0x80 ); var buffer: BitmapData = new BitmapData( 128, 128, false, 0x80 ); var output: BitmapData = new BitmapData( 256, 256, true, 0x80 ); var surface: BitmapData = BitmapData.loadBitmap( 'surface' ); var bounds: Rectangle = new Rectangle( 0, 0, 128, 128 ); var origin: Point = new Point(); var matrix: Matrix = new Matrix(); var matrix2: Matrix = new Matrix(); matrix2.a = matrix2.d = 2; var wave: ConvolutionFilter = new ConvolutionFilter( 3, 3, [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 9, 0 ); var damp: ColorTransform = new ColorTransform( 0, 0, .99609374, 1, 0, 0, 2, 0 ); var water: DisplacementMapFilter = new DisplacementMapFilter( result2, origin, 4, 4, 48, 48, 'ignore' ); attachBitmap( output, 0 ); var ms: Number = getTimer(); var frame: Number = 0; var mouseDown: Boolean = false; onMouseDown = function() { mouseDown = true; } onMouseUp = function() { onEnterFrame(); mouseDown = false; } onEnterFrame = function() { if( mouseDown ) { var mx: Number = _xmouse / 2; var my: Number = _ymouse / 2; source.setPixel( mx + 1, my, 0xffffff ); source.setPixel( mx - 1, my, 0xffffff ); source.setPixel( mx, my + 1, 0xffffff ); source.setPixel( mx, my - 1, 0xffffff ); source.setPixel( mx, my, 0xffffff ); } result.applyFilter( source, bounds, origin, wave ); result.draw( result, matrix, null, 'add' ); result.draw( buffer, matrix, null, 'difference' ); result.draw( result, matrix, damp ); result2.draw( result, matrix2, null, null, null, true ); output.applyFilter( surface, new Rectangle( 0, 0, 256, 256 ), origin, water ); buffer = source; source = result.clone(); }
|
nabe_1234 | Åê¹ÆNo.41363 投稿日時: 2009-1-31 8:18 |
新米 居住地: 投稿: 21
使用環境:
Windows Vista Home Premium SP1,Flash CS3 |
Re: 「クリックすると波紋が広がるスクリプト」を改造したい ActionScript3しか分からなくなっているのですが・・・
> 一番上のレイヤーのフレームに置くことで、 > それ以下のレイヤーのモノ(Flashで描いたベクターデータでも読み込んだビットマップデータでも) > に波紋が出るようにしたい レイヤーに基づく制御って可能なのかな? ActionScriptからは重なり順は見えてもレイヤーは見えなかったような。 それに全部のレイヤーを対象にするなら、 いっそ、MovieClipを入れ子にした方がラクそう。 root -MovieClipA ← ここにフィルターを適用。 --Layer1 --... --LayerN Flash8でMovieClipにFilter適用できたか自信がないけど、FlashCS3とかなら、 var surface: BitmapData = BitmapData.loadBitmap( 'surface' ); ... attachBitmap( output, 0 ); ... output.applyFilter( surface, new Rectangle( 0, 0, 256, 256 ), origin, water ); の代わりに、 MovieClipA.filters = [water]; とできた気がする。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |