トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     「クリックすると波紋が広がるスクリプト」を改造したい
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
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();
}


----------------
9999.99GHz
http://www.geocities.jp/hakugeki9999/
Home,

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];

とできた気がする。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops