ボタンとイベント

現況報告

 なんとなくやる気がしないのはなぜなんだかなぁ。
 Flash CS3面白いと思うんだけど、デザイナ系の人が飛びついておもしろがっている印象は全然ないよねー。
 私はプログラマ系かデザイナ系かと言われると中途半端系なので、気持ちは分かる。というかデザイナ系の気持ちに今なってるってことでしょうか。
 絵を描いたりアニメーションしたりって部分で、あんまりトキメク変更点がないんだよなぁ。トランジションとか迂闊に適用しちゃうと、もう適用前のタイムライン感覚でいじくり回せなくなっちゃうし。
 アレですよ、「設計図に従って作るための機能」とかアーティストはときめかないのですよ。アーティストは感性の赴くままに作りたいのですよっ!!

 Σc ' _' )  < 出たな、アーティスト宣言
 $ σ_σ$  < イタいわね

 とはいえ、AS3はじわじわ浸透してきてるみたいだし、いつのまにか日本のFlash Player9の普及率も90%越えてるっぽいので、もうクライアントさんに説明する時も楽ですね(誰向けのコメントなんだか)
 Ajaxも飽きたでしょ、それに所詮ブラウザの上だけでしょ、FlashはAIRもあるし、もちろんアニメーションもバリバリだし楽しいよね。
 …本人があんまりそんなこと思ってないので、説得力がないですが。
 なんでCS3もってるかというと、なんか今アップグレードしないとMXからのアップグレードパスが途切れちゃうらしかったんで、なんとなく的に。

 さぁ、気を取り直して。
 ある程度、自分用ライブラリとTipsを整備して、リハビリ的にBak@flaに投稿できるようなもんでも作りましょうかねぇ。

まずは従来のボタン

 インタラクティブなもんにしようと思ったら,とりあえずボタンでしょう。
 CS3にも以前と同じようにムービークリップがあって、ボタンもある。
 正直なところ、このボタンというやつが以前からのガンで、もの凄い使いづらい。スッパリなくしちゃえよと思う。
 いちいちボタンを作る時はボタンの絵を描かないといけない、マウスオーバーとかダウンを装備しようと思えばそれも…うわめんどくさ。さらに、ムービークリップと違ってシンボルの中にスクリプト書けないから、処理の共通化しようと思ったら、タイムラインにスクリプト書いてそれ呼び出したりとかして、結局直感的じゃなくなるしさー。あと使用不可(Enable)画像付いてないんだよ未だに、ボタンは見えてるのにグレーになってて押せないやつ。
 HyperCardのボタンは良かったなぁ。丸角(まるかど)の四角のボタンが簡単に作れるし、アイコンは簡単に貼れるし、スクリプトはボタンに直接書けるし、透明でも当たり判定あるし…懐古な俺。

 Σc ' _' )  <  早く先いけよボケ

 いつのバージョンからついたんだか分からないけど、プリミティブっていう描画方法が装備されていて、○とか□とかに特化した描画をしてくれる。後から大きさ変えたりするとき便利。HyperCard程直感的ではないけど多少改善された、と見るべきか、単に機能が増えて余計分かりにくくなったというべきか。
 とりあえず、これで単純な丸角の四角を描いて、[修正]-[シンボルに変換…]で出てきたダイアログでボタンを選んで[OK]と。
 はい、ボタンができました。

 で、スクリプトでも書こうかというところなんだけど、AS3.0はボタンに直接スクリプトが書けない。
 このへんもデザイナー的にイラっとするところ。
 ちなみに以前のように、インスタンスをOpt+ダブルクリックするとスクリプトエディタが開くんだけど、「現在の選択範囲にアクションを割り当てることはできません」…て、ボタンにスクリプト書けねーじゃん、意味ねーじゃん!嫌がらせかよ!!

ではクリックに反応させましょう

 HakuhinさんところのFlashゲームプログラミング講座 For ActionScript3.0の解説でもパク…参考にしようかと思ったけど、ボタンの記述ないね。あそこはキーボードアクションゲーム系だからなぁ。
 ヘルプだとイベントの処理あたりが、イベント処理の話。
 ちなみにこのボタンオブジェクトSimpleButtonというクラスだそうな。詳しくはSimpleButton - ActionScript 3.0 コンポーネントリファレンスガイドを見る。
 ちょんまげらペンギンこと野中文雄さんところのFN0706001 - ActionScript 3.0に対応したMovieClipのボタンをつくる - Flash : テクニカルノートも参考になる。これはムービークリップだけど。

 とりあえず、作ったインスタンスに名前を付けなきゃいけない。ホントね、名前を考えるのって凄いコストになんのよ、制作上の。マジ勘弁してほしい。
 とりあえず、名前は"_btn"でいいや。

 フレームにスクリプトを書く。うわー今気づいた、以前の[ノーマルモード]が[スクリプトアシスト]とか言う名前で生き残ってる。
 マウス操作でスクリプトが書けるモードなんだけど、クラス構成を暗記してないと、ほんと何もできない。
 そして、クラス構成が把握できてるような人は絶対使わない、という誰も幸せになれない機能だ。

 気を取り直して、以下のスクリプトを書く。

_btn.addEventListener( MouseEvent.CLICK, testFunc );
function testFunc( e:Event ):void {
	trace("CLICK");
}

 順を追って説明すると、さっきつけた_btnというインスタンスにaddEventListenerを使って、イベントとそれに対応する関数を登録。
 んで、次の行からは登録した関数。
 単にボタンのクリック動作を作るために、インスタンス名と関数名の二つの名前を設定しなきゃいけない…ちょー面倒!!!!

 せめて関数はどうにかならないかと、無名関数にしてみる。

_btn.addEventListener( MouseEvent.CLICK,  function( e:Event ):void {
	trace("CLICK");
});

 あ、動く。でもなぜか自動フォーマットすると、エラーが出る。…なんで?
 エラーも「次の行の近くに自動フォーマットのエラーがあります : trace("CLICK");」と具体性の全くない内容。

コンポーネント使ってみますか

 どうもSimpleButtonってクラスは限りなく廃止(obsolete)される方向っぽいし使いにくいので、コンポーネントのボタンを使ってみることにする。
 どうもInteractiveObjectの子孫はCLICKイベントを受け取れるらしい。InteractiveObject - ActionScript 3.0 コンポーネントリファレンスガイド
 コンポーネントもInteractiveObjectの子孫なので、ボタンコンポーネントに_btnと名前を付ければ、さっきのスクリプトそのままで動くみたい。

 コンポーネントウインドウのUser InterfaceからButtonをステージにドロップ。
 プロパティでインスタンス名を_btnに設定。そして実行。

 動いた動いた。
 こちらのコンポーネントの方は、かなりHyperCardのボタンに近いノリで使えるようなので、基本こちらを使っていく方針でいくことにする。
 ただ、カスタマイズしたいときはどうやるもんなのか良く判らない。これは次回以降の課題ということで。

 イベントの設定方法がaddEventListenerに統一されたのはステキなんだけど、こういう基本的なところが面倒になったのは今イチ納得しかねる。
 スクリプト自体は同じでも、なにかウィザード的なものでフォローすべきだろう。
 初心者が欲しているのは「数パターン程度の定型文が入力されて操作が簡潔になること」だ。前述の[スクリプトアシスト]は「マウスによって全ての操作が冗長になる」という丸っきりとはベクトル逆なことやってる。
 この[スクリプトアシスト]使ってるやつなんかいねーだろー、まじでー。使われない割に作るのがめちゃめちゃめんどくさそうな機能なんだよなー。そんなアホ機能に金払ったかとおもうと、もーね。

 ところで、パッケージ版を買った場合、オマケについてくるDVDにボタンの作り方とかのチュートリアルビデオが入ってるので、そのへん参考にすればいいかもしんない。
 Webにも同じものがある。Adobe - Design Center - Video workshopただし英語版のみみたいですが…なんで?DVDは日本語解説されてた気がするんだけど。

 今日はここまで。


2008-02-18