AqButton
2006/12/19 22:22 - AS3.0
前回、前々回の TextSlot はそのインフラとして 4 つのクラスを使用していた、とそれぞれの最後で述べました。
で今回からは、その基本的な 4 つのクラスの話をします。
まぁやはり Swf のパーツ的に重要度の大きいボタンから始めるのが順当でしょう。ということで今回はボタン機能についての話。
- ソース (10.4 KB)
このソースに収録されているクラスファイル AqButton.as は偉大なるグル、野中文雄さん作成のスクリプトに、ほんのわずかばかり俺カスタムを加えたものです(野中さんの解説およびスクリプトは下記のリンクを参照)。
- EventDispatcher.addEventListener()メソッド (FumioNonaka.com Flash : テクニカルノート)
野中さんはよく、ライブラリアイテムのリンケージプロパティでクラスを設定する書き方をなさっています。
私はというと、記述がいろいろな場所に分散するのが好きではないので、リンケージプロパティはまず使わず、タイムラインでフルスクリプトビルドをおこないます(ソースの Sprite.fla のようなコーディング手法)。
そうすると、ボタン機能を持たせる Sprite を AqButton クラスと結びつけるように AqButton のスクリプト側で制御しなけりゃイカンわけです。
で、リンケージプロパティ方式はとても簡便であることには違いないので、これも使えるようにしたい。
というわけで、コンストラクタで引数の有無をチェックし、それぞれに応じて addEventListener の対象を選択するようカスタマイズしました。
フルスクリプトビルドなら必要ないのですが、リンケージプロパティによるクラス設定も残すため、MovieClip の継承はそのままにしておきます。
リンケージプロパティ使用方式のサンプルはソースの Linkage.fla です。
ライブラリアイテムとして、黒い正方形のムービークリップを登録、リンケージプロパティで AqButton をクラス設定しています。
ステージの左側のボタンはタイムラインに手動で配置したビジュアルインスタンス、右側のボタンは new Class() 記述で旧来の attachMovie 的に呼び出したビジュアルインスタンスです。
Sprite.fla 、Linkage.fla 共にボタンアクションが trace 表示をするものなので、ソース配布だけで、Swf 貼り付けはしません。
ところで野中さんのスクリプトで記述されているマウスイベントは以下の二つです。
- MOUSE_DOWN
- MOUSE_UP
この二つによって、以下の三つの挙動を表現しています。
- onPress
- onRelease
- onReleaseOutside
公式リファレンスを見ると、マウスイベントには他にもいくつか種類があることが分かります。
私としては、CLICK は MOUSE_DOWN で足りるし、DOUBLE_CLICK はあまり必要性を感じない。 MOUSE_OUT と MOUSE_OVER は ROLL_OUT と ROLL_OVER との違いがよく分からん。
ってことで、ROLL_OUT と ROLL_OVER だけを付け加えました。