ActionScript
Adobe Open Sourceで公開されたFlex PMDはAS3またはFlexで以下のような推奨されていないコーディング等がされていないかなどを検出するツールらしい。
- 使用していないコード
- 効率の悪いコード
- 複雑なコード
- 長過ぎるコード
- Flexコンポーネントの不適切な使用
- Adobe Open Source
- http://opensource.adobe.com/
- Flex PMD
- http://opensource.adobe.com/wiki/display/flexpmd/FlexPMD
便利そうだ。
Flashでのアクセシビリティ対応時、focusRectをtrueまたはfalseに設定した時の挙動の違いにハマったのでメモ。
focusRectがtrueの時
- フォーカスに黄色の枠が表示される
- <ENTER>キーでのMouseEvent.CLICKイベントがリスナーに加えられる
focusRectがfalseの時
- フォーカスに黄色の枠は表示されない
- <ENTER>キーでのMouseEvent.CLICKイベントはリスナーに加えられない
※KeyboardEventで<ENTER>キーを判定しなければならない。
ボタン、ムービークリップボタンでの_over動作などはtrue/false共に付くが、MouseEvent.ROLL_OVERなどにはFocusEvent.FOCUS_INなどで対応が必要。
制作途中での変更は少々面倒。特にfalseで制作したものをtrueに変更した場合、<ENTER>キーでのクリックイベントとキーボードイベントが同時に起こり、2度クリックしたような状態になってしまうので、注意が必要。
まさにこれにハマってしまった・・・
また、visibleがfalseになものはイベントを受け付けないが、トウィーンなどでゆっくり消えていくボタンなどはremoveEventListenerを行わないと<ENTER>キー連打で何度もイベントが発生することになる。
今まではFlashでテンプレートファイルを作って使っていたんだけど、FlashDevelopでプロジェクトを作成するときに、Flaファイルまで作ってくれると楽じゃないのかと、Flaのテンプレートファイルを"src"ディレクトリに置いてみた。
当たり前だけど、ちゃんと作成される。かなり楽になった。以下詳細。
※この作業は自己責任でお願いします。
- [C:\Program Files\FlashDevelop\Projects]内のIDEプロジェクトをコピー。
- FlashDevelopの[toolsメニュー] - [FlashDevelop Application File]を開く。
- 開いたウィンドウ内"Projects"ディレクトリ内に貼り付け。
- 貼り付けたIDEプロジェクトをリネーム(110を111など)
- ディレクトリ名の構成は「数字 + space + カテゴリ名 + space + 用途」となっている。
数字は並び順が決まるもので適当でも良いようだが、被らないようにしたほうがいいかも。
- ディレクトリ名の構成は「数字 + space + カテゴリ名 + space + 用途」となっている。
- IDEプロジェクトディレクトリ内に"src"ディレクトリと"bin"ディレクトリを作成。
- "src"ディレクトリにFlaテンプレートファイルと"lib"ディレクトリにASテンプレートファイルを置く。
※"lib"ディレクトリはウチでは"src/lib"ディレクトリとなっています。- ウチがIDEプロジェクトを作成する場合、
- ドキュメントクラスがMain.asのmain.Fla
- ドキュメントクラスがIndex.asのindex.Fla
main.Flaとindex.Flaは- [パブリッシュ設定] - [形式]でパブリッシュ先を相対パスで"bin"ディレクトリにする。
- [パブリッシュ設定] - [Flash] - [スクリプト:設定]でドキュメントクラスを設定。また、「ステージのインスタンスを自動宣言」のチェックを外した。
- 同じく、[パブリッシュ設定] - [Flash] - [スクリプト:設定]でライブラリのパスを通す。
- ウチがIDEプロジェクトを作成する場合、
- "Project.as3proj"をカスタマイズする。
-
・ ・ ・ ・ ・ ・
-
以上。
allowDomain()を使わずに読み込んだ別ドメインのswfとイベントのみをやりとりするsharedEventsの存在を知った。
// 送出側 loader.contentLoaderInfo.sharedEvents.dispatchEvent(new Event(Event.XXX));
// 受取側 loaderInfo.sharedEvents.addEventListener(Event.XXX,xxxHandler);
昨日までとんでもない勘違いをしていた。 ドキュメントクラスの実行タイミングは1フレーム目のロード直後。
ドキュメントクラスが実行されるのは、1フレーム目がロードされきった時なので、 これよりも前に色々書き出されてるといつまでたってもプリローダとかが実行されない。
また、ドキュメントクラスを使用している場合、1フレーム目はコンテンツが完全にロードされるまで次のフレームに移動しない。
当然ながら1フレーム目にステージ配置したムービークリップボタンなどがある場合、読み込まれて配置されるまでnullとなるので、デバッグ段階でもエラーが出る。
よく今までトラブらなかったものだ・・・
