コンポーネントの現状の理解度を曝してみる2

とりあえず成果

 今回の成果。コンポーネントを作って「キーボード関連イベントを調べる」での調査結果を表示してみた。

 右側のピンクの部分がMacとWINでコードが違う、だいたいAsciiとJISキーボードでそのあたりの配列が違うので、多くの環境で使うことを考えると、そもそもあまり使える範囲ではない。
 ではないにしても、酷い。Mac + JIS環境に至っては、そもそもイベントが発生しなかったり、違うキーのコードが帰ってきたり、テンキーが丸っきりやる気のない挙動。
 とりあえず、アルファベットがプリントされてないところは使わない方がいい感じ。

えーまだ良く判りません

 コンポーネントの作り方が、ちょっとずつ分かってきたので、中間報告的に現状を曝してみることにする。

 関係ないけど、なんでムービークリップを新たに作った時に、ライブラリのどのフォルダに作るか指定できないんだ…。こんなんだから、ライブラリの中が訳の分からんシンボルでいっぱいになって、後で混乱するんだ。

ドキュメントのパブリッシュ設定

 ActionScriptのバージョン(これは勿論ActionScript3.0)の後ろに[設定...]というボタンがある。
 この中の[ステージのインスタンスを自動宣言]のチェックをOFFにする。超重要。
 超重要にもかかわらずAdobeのヘルプには、何の説明もなくこのチェックを外すように書いてあるページが一カ所あるだけで、それがなぜ必要でどういう意味があるかはさっぱり分からない。  そこで野中大先生ですよ、あーた。
 F-site | [AS3] MovieClipインスタンスとインスタンス名
 こんなんヘルプだけで分かるわけねー。

 わたしゃコレでドハマり、やっぱりハマるひとは多い…というかハマらない人はいないだろうコレ、ヘルプに書いてないんだから。
 困ってた人たちをリンクしておく。結構プログラムできる人もハマってる。

 なんか止まらないこともある模様…。
 s.h.log: Flash CS3 - ステージのインスタンスの自動宣言が止められないので

 このチェックのせいで発生しがちなのが、1046:型が見つからないか、コンパイル時定数ではありません : _。と、1120:未定義のプロパティ _ へのアクセスです。
 チェックをoffにしておくと、当然自動的に宣言されなくなるので、オーサリングで設定したオブジェクトをいちいちActionScriptで設定しなきゃいけなくなる。

 要は、ActionScript3.0という言語は「オーサリング環境の都合というものを全く考慮していない」言語だということのようだ。
 オーサリング環境が以前から存在するにもかかわらず、ActionScript3.0は自分が先に生まれたような態度を取っているワガママ野郎ってことだ。
「オーサリング環境なぞ女子供の扱うもの、真の漢はコードエディタのみでプログラムを作るものよ」と小馬鹿にしたギークの鼻持ちならないツラが浮かぶようだぜっ。

 Σc ' _' )  < 鏡を見てみろよ

 ぎゃーーーっ!!出た、ギーク!!…ってちゃうわーっ!!!!!

 $ σ_σ$  < まぁまぁの、のりツッコミね

リンケージプロパティ

 シンボルプロパティの詳細にも同じものがある。つまり…リンケージプロパティって開く必要がない。
 なんでこんな中途半端な仕様になっているか謎。

クラス
 ムービークリップを結びつけるクラス。パッケージのパスも含める。
 チェックボタンは、クラスが指定できているか調べる。鉛筆ボタンは、クラスの定義ファイルの編集を行う。
基本クラス
 継承元となるクラス(基底クラス・スーパークラス・親クラス)。上記クラスで指定したクラス定義asファイルがあるときはActionScriptのクラス定義のextendsをこれにあわせる必要がある。
 MovieClipかMovieClipを継承したクラスを書く。
 相変わらずFlashのボタンシンボルは使い物にならないので、野中さんの解説を参考に自分用のボタンクラスを作っておくと良いだろう。
  右のボタンはクラスと同じで、クラスチェックと定義ファイルの編集を行う。
 ちなみに、ボタンシンボルがどう使い物にならないかというと、disableの指定しても絵が変わらないとか意味分からん。ボタンにしか使われないのなら、一つ絵を指定したらその絵をmouseDownに指定して自動でmouseUpの絵を作るぐらいのことしても罰は当たらんだろう。HyperCardはやってくれたのに…。それに、前にも書いたようにサンプルのボタンのできが酷い。使えないにも程がある。
ActionScript に書き出し
 このチェックを入れると上記のクラス名でActionScriptでクラスを生成(new)できるようになる。
 どちらかというと[ActionScriptでこのクラスを使用]という感じの意味のようだ。英語だと[Export for ActionScript]で、そのままだと[ActionScriptに送る(輸出)]といったところでsendに近い意味だと思われる。これを「書き出し」と訳しちゃうから意味分からなくなるんだよなぁもう。
ランタイム共有用に書き出し
 [ActionScriptに書き出し]のチェック必須。なぜ必須なのか良く判らないが。
 英語では[Export for runtime sharing]だが、単に[実行時共有]で良いんじゃないかなぁ…。
 使い方は今イチ分かってないんだけどね。
最初のフレームに書き出し
 ActionScriptでnewした時に、ファイルが途中までしか読み込まれていない場合は、ムービークリップが生成されない。最初のフレームに配置することで、実行時に必ず生成できるようにする。
 当然最初のフレームが実行されるまでに読み込まれるファイルサイズが大きくなるので、ストリーミング再生を行う場合には極力避けたいオプション。なのになぜかデフォルトでチェックが入っている。
 英語では[Export in first frame]で、[最初のフレームに配置]あたりが訳としては適当かと思う。
ライタイム共有用に読み込み
 良く判らん。
URL
良く判らん。

コンポーネント定義

パラメータ

 Flashでは、コンポーネントで新たに定義されたプロパティを、パラメータと呼んでいる。
 しかし、名称は[追加プロパティ]とでもした方が分かりやすいだろう。パラメータというと別のもののように感じる。
 どうにも、macromedia(Adobe)の命名センスは酷く、ユーザを混乱させる。

名前変数タイプ
任意プロパティ名デフォルト値値の種類(クラス)

 さて、このデフォルト値が、どのタイミングで設定されるかというと、コンストラクタが呼び出された後、parentにappendChild()された直後、フレームスクリプト実行直前(正確にはフレームスクリプトとして実行されるがオーサリングで書かれたスクリプトより先に実行される)っぽい。
 しかし、この仕様だとコンストラクタでプロパティの内容が設定されるもの(ほとんどだと思う)は、設定が2回呼ばれることになり、かなり効率悪い感じだ。
 これを避けるために、デフォルトだとsetterが呼ばれないのだろうが…もっとスマートなやりかたがあるんじゃねーの?

 このダイアログの下にあるクラスを指定しているときは、このパラメータの部分は無視され、OKを押したら何の警告も無くスクリプトの[Inspectable]メタデータタグの設定内容で置き換えられる…酷い。つまり、ここで指定しても無駄。片方しか使えないならラジオボタンで選択するようにしてください、お願いします、GUIの超基本です。

クラス
 プロパティ定義(パラメータ)を調べるクラス。パッケージのパスも含める。
 通常リンケージのクラスと同じものを書いておくが、値としては別物(よって別のクラスを指定することもできる…あまり意味はない。ならなぜ二カ所で設定させるようになっているのかが謎だ。Adobeってアホ?)
 これを指定すると、ダイアログを閉じた時に指定したクラスのスクリプト(ファイル)にある[Inspectable]メタデータタグの内容がパラメータパネルに設定されるようになる。
 このとき、同じダイアログのすぐ上にあるパラメータの内容は無視される。
 つまり、実際このダイアログではパラメータかクラスかの片方しか設定できない。これはAdobeのダイアログの設計ミス、要注意!!!
カスタムユーザーインターフェイス
 コンポーネントのプロパティバネルを自前で作った場合に設定する。[コンポーネントインスペクタ]パネルに出現する。コンポーネントの FLA ファイルの埋め込みか、外部 SWF ファイルを指定。
 作り方は良く判らん。
ライブプレビュー
 オーサリング中のコンポーネントの表示をカスタマイズするためのファイルを設定する。
 コンポーネントを作り替えるとライブプレビューも作り直す必要があり、極めて面倒。
 ライブプレビューに設定するファイルの作り方は、fl.livepreview.LivePreviewParentのリファレンスに詳しい。
 ライブプレビューを設定すると、カラーやブレンドなどの効果が反映されなくなる。
 [外部.swfファイルでライブプレビュー]を選択した場合に指定したswfファイルのパスにいわゆる二バイト文字が含まれると、ライブプレビューされない。
 すげー、なんつー手抜き実装。よくこの状態で出荷する気になったな。
説明
 AS3の場合は使われることはない。MXの[リファレンス]パネルに出ていた。
 OFFにしとけよAdobe。
アイコン
 コンポーネントパネルに表示される時のアイコン。
 クラスを指定している場合は[IconFile]メタデータタグで指定できるので、こちらは不要。
 …と思うんだが、IconFile指定が反映されない。だいたいアイコンファイルはどこへ置けば良いのか?画像形式はなにか、良く判らん。
 一応ActionScript2.0のコンポーネントの作り方を参考にしてみたんだが。
インスタンスのパラメータはロックされています
 OFFにするとインスタンスを選択した時のパラメータパネルでプロパティを追加できるようになる。
 だいたい、インスタンス毎に違うプロパティを作る必要がある状況というのが分からない。常にONでいい。
ツールヒントテキスト
 コンポーネントのマウスオーバーで出るツールヒント(ツールチップ)の説明。
 どうも国際化不能っぽい。Adobeは基本的に世界には英語しかないと思っている企業だな。
 MSやAppleも酷いものだと思っていたが、相対的には頑張ってる方だったんだな。
編集するフレーム
なんだか分からない。
Playerバージョンの最小要件
 9.0以降以外選択の余地はない。
ActionScriptのバージョンの最小要件
 3.0以降以外選択の余地はない。

 今日はここまで。


2008-05-15