フィルタは、Flash Basic 8 の Flash ユーザーインターフェイスを使用しても、Flash Basic 8 または Flash Professional 8 で ActionScript を使用しても、適用できます。ActionScript を使用して、ムービークリップ、ボタン、またはテキストフィールドに各フィルタエフェクトを適用できます。
ActionScript を使用してインスタンスにフィルタを適用する場合は、置き換えマップフィルタや畳み込みフィルタも使用できます (これらのフィルタは Flash のユーザーインターフェイスからは使用できません)。フィルタはベクター定義に適用されるので、SWF ファイルにビットマップイメージを格納するという、ファイルサイズに関するオーバヘッドが生じません。ActionScript を記述して、テキストフィールドやムービークリップ、ボタンに適用している既存のフィルタを変更することも可能です。
この時点で、ActionScript コードを使用して基本的なフィルタエフェクトを適用してみることもできます。Flash のドキュメントには多くの例 (上記を参照) がありますが、ここでは簡単な例としてベベルフィルタの適用から始めます。次の手順に従ってこのフィルタを適用してみてください。
タイムラインのフレーム 1 を選択し、次の ActionScript を追加します。
import flash.filters.BevelFilter; // ベベルフィルタを定義 var bevel:BevelFilter = new BevelFilter(4, 45, 0x99CCFF, 1, 0x003399, 1, 10, 10, 2, 3); // 強さを設定 bevel.strength = 5; // フィルタを my_mc に適用 my_mc.filters = [bevel];
メモ : flash.filters.BevelFilter のようなパッケージに含まれるフィルタでの作業については、Flash LiveDocs の次のセクションを参照してください。[ActionScript 2.0 の学習]-[ActionScript 2.0 によるアニメーション化、フィルタ適用、描画]-[フィルタエフェクトのアニメーション化]-[フィルタパッケージの操作]。
[制御]-[ムービープレビュー] を選択してドキュメントをテストします。
べベルフィルタに渡すパラメータについては、Flash LiveDocs の次のセクションを参照してください。[ActionScript 2.0 リファレンスガイド]-[ActionScript クラス]-[BevelFilter (flash.filters.BevelFilter)]。
ActionScript を使用した各種フィルタの適用はほとんど同じ方法で行います。ただし、フィルタの適用時、一部のフィルタには異なる情報が必要です。たとえば、カラーマトリックスフィルタには配列が必要です。カラーマトリックスフィルタを使用して、次の例のように、インスタンスの明度を変更できます。
タイムラインのフレーム 1 に次の ActionScript を追加します。
import flash.filters.ColorMatrixFilter;
System.security.allowDomain("http://www.helpexamples.com/");
var mcl_obj:Object = new Object();
mcl_obj.onLoadInit = function(target_mc:MovieClip):Void {
var myElements_array:Array = [1, 0, 0, 0, 100,
0, 1, 0, 0, 100,
0, 0, 1, 0, 100,
0, 0, 0, 1, 0];
var myColorMatrix_filter:ColorMatrixFilter = new ColorMatrixFilter(myElements_array);
target_mc.filters = [myColorMatrix_filter];
}
this.createEmptyMovieClip("img_mc", this.getNextHighestDepth());
var img_mcl:MovieClipLoader = new MovieClipLoader();
img_mcl.addListener(mcl_obj);
img_mcl.loadClip("http://www.helpexamples.com/flash/images/image2.jpg", img_mc);
このコードは、MovieClipLoader インスタンスを使用して、JPEG イメージを動的にロードします。ロードが完了し、イメージをステージの中央に配置した後で、カラーマトリックスフィルタを使用して、インスタンスの明度を 100% に設定します。
カラーマトリックスの詳細については、Flash LiveDocs の次のセクションを参照してください。[ActionScript 2.0 リファレンスガイド]-[ActionScript クラス]-[ColorMatrixFilter (flash.filters.ColorMatrixFilter)]。
[制御]-[ムービープレビュー] を選択してドキュメントをテストします。
フィルタの適用後、ActionScript を使用してプロパティの調節やフィルタのアニメーション化のようなフィルタの操作を行うことができます。詳細については、次のセクションを参照してください。「ActionScript を使用したフィルタプロパティの調整」および「ActionScript を使用したフィルタのアニメーション化」。
メモ : 他にも、ActionScript コードを使用して適用できるフィルタがあります。ただし、それらのフィルタは Flash のユーザーインターフェイスからは使用できません。それら 2 つのフィルタとは、畳み込みフィルタと置き換えマップフィルタです。これらのフィルタの詳細については、Flash LiveDocs の次のセクションを参照してください。
畳み込みフィルタの使用 ([ActionScript 2.0 の学習]-[ActionScript 2.0 によるアニメーション化、フィルタ適用、描画]-[ActionScript によるフィルタの操作]-[畳み込みフィルタの使用])
ActionScript コードを使用して各フィルタを適用する例については、Flash LiveDocs の次のセクションを参照してください。
オブジェクトに適用されたフィルタの配列には、標準の ActionScript 呼び出しで MovieClip.filters プロパティを使用することによって、アクセスできます。この処理では、ムービークリップに現在関連付けられている各フィルタオブジェクトが格納されている配列が返されます。複数のフィルタをオブジェクトのフィルタ配列に追加することによって、複数のエフェクトを適用できます。エフェクトはそれらが配列内で列挙されている順序で適用されます。
重要なのは、filters プロパティの設定では、渡されたフィルタ配列を複製し (次の例を参照)、参照としてフィルタを格納しないことです。filters プロパティを取得すると、配列のコピーが返されます。このアプローチの問題点は、次のようなコードが正常に動作しないことです。
// このコードは動作しない my_mc.filters[0].push(myFilter);
前のコードは、フィルタ配列のコピーを返すので、コピーを修正することになります。次の例は、オブジェクトの既存のフィルタリストの末尾に、ぼかしフィルタを追加します。
// このコードは動作する import flash.filters.BlurFilter; var filterList:Array = myClip.filters; filterList.push(new BlurFilter(3,3,2)); myClip.filters = filterList;
このコードの利点は、あるオブジェクトからフィルタをコピーし、それらを修正し、別のオブジェクトに適用できることです。その際、元のオブジェクトのフィルタへの影響を心配する必要はありません。
オブジェクトに適用されたフィルタの配列には、標準の ActionScript 呼び出しで MovieClip.filters プロパティを使用することによって、アクセスできます。複数のフィルタをオブジェクトのフィルタ配列に追加することによって、複数のエフェクトを適用できます。フィルタはそれらが配列内で列挙されている順序で適用されます。この処理では、ムービークリップに現在関連付けられている各フィルタオブジェクトが格納されている配列が返されます。各フィルタには、そのフィルタ固有のプロパティのセットがあります。フィルタは、通常の配列オブジェクトのようにアクセスして、変更できますが、filters プロパティを使用してフィルタの設定や取得を行うと、filters オブジェクトの参照ではなく、複製が返されます。
重要なのは、filters プロパティの設定では、渡されたフィルタ配列を複製し (次の例を参照)、参照としてフィルタを格納しないことです。filters プロパティを取得すると、配列の新しいコピーが返されます。これによって、あるオブジェクトからフィルタをコピーし、それらを修正し、別のオブジェクトに適用できます。その際、元のオブジェクトのフィルタへの影響を心配する必要はありません。このアプローチの問題点は、次のようなコードが正常に動作しないことです。
// 正常に動作しない my_mc.filters[0].blurX = 20;
前のコードは、フィルタ配列のコピーを返すので、コピーを修正することになります。blurX プロパティを変更するには、代わりに次の ActionScript コードを使用する必要があります。
// 正常に動作する var filterList:Array = my_mc.filters; filterList[0].blurX = 20; my_mc.filters = filterList;
次の例は、ステージ上のマウスポインタの位置に応じて、イメージにぼかしを適用します。水平または垂直方向にマウスポインタを動かすと、その動きに応じて、ぼかしフィルタの blurX および blurY プロパティが調整されます。
タイムラインのフレーム 1 に次の ActionScript を追加します。
import flash.filters.BlurFilter;
// ムービークリップ holder_mc を新規作成
var holder_mc:MovieClip = createEmptyMovieClip("holder_mc", 10);
// ムービークリップ img_mc を作成してネスト
holder_mc.createEmptyMovieClip("img_mc", 20);
// イメージを image_mc にロード
holder_mc.img_mc.loadMovie("http://www.helpexamples.com/flash/images/image2.jpg");
// ぼかしフィルタを適用
holder_mc.filters = [new BlurFilter(10, 10, 2)];
// ムービークリップをステージに配置
holder_mc._x = 75;
holder_mc._y = 75;
// マウスの動きに応じてぼかしフィルタを調整
holder_mc.onMouseMove = function() {
var tempFilter:BlurFilter = holder_mc.filters[0];
tempFilter.blurX = Math.floor((_xmouse / Stage.width) * 255);
tempFilter.blurY = Math.floor((_ymouse / Stage.height) * 255);
holder_mc.filters = [tempFilter];
};
flash.filters.BlurFilter クラスを読み込み、完全修飾名を使用しなくても BlurFilter クラスを参照できるようにします。2 番目のセクションは、2 つのムービークリップを作成し、ネストしたクリップの 1 つにイメージをロードします。3 番目のセクションは、ステージ上のマウスポインタの動きに応じて、ぼかしを調整します。 blurX プロパティが調整されます。y 軸に沿ってマウスポインタを動かすと、フィルタの blurY プロパティが調整されます。ステージの左上隅に向かってマウスポインタを近づけると、ムービークリップに適用されるぼかし量が減少します。