Adobe Flash非公式テクニカルノート ActionScript 3.0に対応したMovieClipのボタンをつくる
Flash MX以降(ActionScript 2.0/1.0)では簡単な設定で、Buttonシンボルと同様のボタンアニメーションを、MovieClipシンボルに対して適用することができました。その機能は、Flash CS3にも基本的に受継がれています。ただし、ActionScript 3.0では、2.0/1.0とは異なる設定や注意点があります。 1. MovieClipシンボルでボタンのアニメーションを設定する
第2に、MovieClipシンボルの第1フレームに、つぎのスクリプト001を設定します。ステートメントは2行です(図001)。MovieClipインスタンスをタイムラインに配置して[ムービープレビュー]で確認すると、マウスポインタとのインタラクションにより、MovieClipのアップ/オーバー/ダウンのイメージが変化します(サンプルSWF)。 スクリプト001■ボタンのMovieClipに設定するフレームアクション
図001■MovieClipにフレームラベルとフレームアクションを設定 上記スクリプト001について、簡単に説明しましょう。まず、第2ステートメントは、ActionScript 2.0/1.0の場合と同じく、マウスポインタとのインタラクションに関係なくMovieClipのフレームが再生されてしまわないように、再生ヘッドを第1フレームで止める処理です。 つぎに、第1ステートメントは、MovieClipインスタンスをボタンとして動作させるため、buttonModeプロパティにtrueを設定しています。表001で設定したフレームラベルを動作させるとともに、インスタンスに重ねたポインタを指差しカーソルに変化させます。 2. ボタンのMovieClipシンボル内に配置したMovieClipインスタンス 図002■MovieClipにフレームラベルとフレームアクションを設定 ヒット領域を指定するMovieClipインスタンス名をhitArea_mcとすれば、前記MovieClipシンボルのフレームアクション(スクリプト001)につぎのステートメントを追加します。 hitArea = hitArea_mc; ところが、この修正の結果、ボタンのアニメーションが動作しなくなります。ActionScript 3.0ではマウスイベントは、MovieClipシンボル内に配置された子のMovieClipインスタンスがまず受取ります。すると、親のMovieClipシンボルに設定したボタンのアニメーションは、実行されなくなってしまうのです。 この結果を避けるためには、ボタンのMovieClipシンボル内にはMovieClipインスタンスは置かず、替わりにシェイプやグラフィックインスタンスを用いることが考えられます。しかし、たとえば上述のヒット領域を指定するためには、その領域をMovieClipインスタンスとして作成し、配置しなければなりません。また、シンボル内のイメージにドロップシャドウなどのフィルタを適用しようとすると、やはりその対象はMovieClipにする必要があります(図002)。 図003■フィルタの適用対象はMovieClip ボタンのMovieClipシンボル内にMovieClipインスタンスを配置する必要があるときは、マウスイベントを受取らないように、そのインスタンスのmouseEnabledプロパティをfalseに設定します[*1]。たとえば、ヒット領域のMovieClipインスタンスhitArea_mcに対してこの設定を行うときは、前記MovieClipシンボルのフレームアクション(スクリプト001)につぎのステートメントを追加します。 hitArea_mc.mouseEnabled = false; _overや_downフレームに単独で使われているMovieClipの場合には、_upの第1フレームでインスタンスにプロパティを設定することはできません。各フレームにそれぞれ設定のフレームアクションを置くか、そのインスタンスのMovieClipシンボル内に自身のmouseEnabledプロパティを設定するステートメントを記述する必要があります。とくに、ボタンのシンボル内で使い回すMovieClipについては、後者の方が便利でしょう。 mouseEnabled = false; 前述フレームアクション(スクリプト001)に修正を加えて、MovieClipインスタンスhitArea_mcをヒット領域として指定したのが以下のスクリプト002です。ボタンのMovieClipシンボル内に配置するMovieClipインスタンスには、それ自身のフレームアクションとして上記のmouseEnabled設定のステートメントを追加することにします(スクリプト003)。 また、Buttonインスタンスの[ヒット]フレームと異なり、hitAreaプロパティでヒット領域に指定したMovieClipインスタンスは、そのままでは画面に表示されます。もし表示を隠したい場合には、インスタンスのvisibleプロパティをfalseに設定する必要があります[*2]。 スクリプト002■ボタンのMovieClipにヒット領域の設定を加えたフレームアクション
スクリプト003■ボタンのMovieClipシンボル内に配置されたMovieClipに加えるフレームアクション
フレームラベル"_up"を第1フレームに設定すると、ボタンのイメージがアップに戻るたびに、第1フレームアクションが処理されます。直接の問題は発生しないものの、何度も処理を繰返す必要はありません。_up/_over/_downのフレームラベルは、第2フレーム以降に設定すると、無駄な繰返しが避けられます(図004)。 図004■第1フレームアクションの後にフレームラベルを設定
作成者: 野中文雄 Copyright © 2001-2006 Fumio Nonaka. All rights reserved. |
|||||||||||||||||