ボタンやテキストフィールドを駆使してムービークリップをがちゃがちゃと作り込めば、オリジナルのUIを作ることができる。
しかし、一般的なUIを一から作るのは、ヒジョーに面倒。そんなところに労力を注ぎ込みたくないというのが、怠惰なプログラマーの正しい姿。
てなわけで、今回はFlashに用意されているGUIコンポーネントの使い方を、ざっと調べてみたい。
標準のGUIコンポーネントについては、自分の買った参考書では「FLASH ActionScript辞典」以外は、ほとんどか全く触れていない。
付属のマニュアルには、そこそこ詳しい解説があるので、まじめに読む。
ちなみに、MX(6)で導入された機能で、5のスマートクリップの機能強化版だそうだ。
本体についてくるのは、CheckBox、ComboBox、ListBox、PushButton、RadioButton、ScrollBar、および ScrollPane の 7 つ。
巷には、有志が作ったコンポーネントもあるみたい。
コンポーネントは、ECMAScriptのコアオブジェクトやFlashのオブジェクトと違って、属性というものがあるようなないような感じだ。
というのも、属性の設定はgetXXXとsetXXXで行うからだ。
あんまり、いろいろな方法が混在しているのも困ったもんだ、watchを使えばMovieClipと同じように、属性 = 値でもいけるはずなんだが…。もしかして、コンポーネント作った人ってwatch の存在を知らない??
メソッドのオーバーライド時に、watchに何か問題があるとかかもしれない…。
まぁいいや、自分でコンポーネント作るときはwatchを使うことにしよう。その時、問題があったら分かるだろう。
さて、標準のコンポーネントは、同じような属性が、_XXXとsetXXX/getXXXで設定できるようになっているが、極力set/getを利用するべき。というのも_XXXを使うと、コンポーネント内のオブジェクトの整合性が崩れることがあるからだ。
標準のコンポーネントを使うときは、ここに気をつけておこう。
コンポーネントを使うには、コンポーネントパネルからステージにドラッグするだけ、ああ簡単。
この時、ライブラリに幾つかUIコンポーネント用のシンボルが追加される。それらはさほど大きなサイズではないのだが、swf書き出しの時にちょっと時間がかかるようになってしまうのが難点。
一度追加したら、後はシンボルの中に入っているので、シンボルパネルから追加可能になる。
で、まずやることは、[プロパティ]パネルの[パラメータ]を設定すること。
[コンポーネントパラメータ] パネルを使ってもいい。
ボタンの場合は[Label]と[Click Handler]がある。
コンポーネントというやつは、ムービークリップの機能強化版だから、基本的にはムービークリップと同じ方法でいろんなことができる。
しかし、ローマに入りてはローマの法に従え、極力コンポーネントらしいやり方で、スクリプトを組んでいくのが、結局のところ楽なスクリプトとなるだろう、…多分。
だから、コンポーネントにonイベントハンドラを仕込むんでなくて、[Click Handler]にクリックしたときのハンドラ(関数)を指定するのが良い。
[Click Handler]に指定する関数は、ボタンを置いた場所のフレームに書いたもので、FPushButtonコンポーネントの中に書いたものではない。
てなわけで、 パラメータの[Click Handler]にtestFncを指定し、フレームを選択して次のようなコードを書く。
function testFnc(){
trace("実行されました");
}
早速実行してみると、難なく成功。
しかし…returnで実行されん、おかしい…。keyEnabledとでもいう属性があるような感じでもないが…。
Flash付属のサンプルも動かんなぁ。ふっ、なんかバグっぽい、つーか俺様裁定でバグ決定!!。何故かspaceで動く。
GUIコンポーネントのソースを見ると、Key.ENTERには対応してない風。
なー、ぜー、だー!!
マニュアルにはenterで決定と書いとるくせにー!!ちょーMM(古っ)
その後、FlashMLにポストしたり、Webを巡ったり、マクロメディアのサポートにメールしたりした結果、マニュアルの誤記であるらしい。
いや、俺はバグ(実装ミス)だと思うね。
もう、returnが働かないのの原因を調べるのに、精根尽き果てたよ。
楽するつもりが、えらい苦労しちゃったよもー。
ボタンの他にも、GUIコンポーネントはあって、実際は主にスクロールリストとかのコンポーネントを使うことになると思うんだけど、その辺を調べるに至らず。
大抵は、普通のボタン使った方が楽だな、たぶん。
今日はここまで。
2003-07-21