この記事のURL

http://www.dango-itimi.com/blog/archives/2013/001198.html


FLASH tips Flash CC 13.1 CreateJS・JSFL 出力関連不具合

昨日 Flash CC の バージョン 13.1 へのアップデートが行われました。
今までのバージョンの Flash CC では、自作 JSFL「FlashToHaxeConverter」を実行すると、Toolkit for CreateJS のパブリッシュコマンドが機能しなくなる、という不具合がありました。今回のアップデートで何か変化はあっただろうかと調べてみたところ、新たな不具合が発生する事となりました。

FlashToHaxeConverter は fla ファイル内全てのシンボルを網羅しファイル出力を行うという内容で 結構負荷が高く、それが原因かどうか、Flash インストールディレクトリ内 JSFL 実行関連ファイルの何かがおかしくなってしまうようです。一度 Toolkit for CreateJS のパブリッシュが不可能になると Flash CC を再起動しただけでは直らず、正常の状態に戻すには少々手間を要しました。

自作 JSFL FlashToHaxeConverter 実行による不具合

アップデートされた Flash CC 13.1 では CreateJS 出力関連機能が新しくなっており、新規で HTML5 Canvas ドキュメントとして fla ファイルを作成する事で CreateJS 関連のデータ出力が可能となります。
fla ファイル一つで、Flash コンテンツと HTML5 Canvas コンテンツ両方の素材出力ができなくなってしまったのは個人的には結構痛手です。将来的には Adobe AIR と Flash をパブリッシュ設定で切り替えることができるように、HTML5 Canvas ドキュメントへも切り替え可能になってほしいところでもあります。

既存 fla ファイルから HTML5 Canvas ドキュメントに移行する方法としましては、メニューのコマンド内「ドキュメント形式を AS3 から HTML Camvas に変換」を選択すると良いとのことです。このコマンドはおそらく JSFL で実行されるものと思われます。

 参考) Adobe Flash Professional CC 13.1 アップデート公開 : akihiro kamijo
 http://cuaoar.jp/2013/12/adobe-flash-professional.html

ここで、FlashToHaxeConverter を事前に実行していた場合、「ドキュメント形式を AS3 から HTML Camvas に変換」コマンドを行うと 出力ウインドウに以下の文字化け ERROR が発生します。(環境 Windows7)

ERROR : Error: addItem: a??a?°c?aa?・ 2 a? ̄c?!a?1a?§a??a€?

JSFL 処理が途中で止まってしまっているのか、妙なガイドレイヤーが作られたりと、変換が正常に行われない状態で fla ファイルが生成されてしまいます。

この状況になってしまったら Flash CC を一度再起動する必要があります。再起動しないと、「ドキュメント形式を AS3 から HTML Camvas に変換」コマンドを何度実行しても ERROR が発生します。(以前のバージョンの Flash CC では再起動しても直らなかったので、状況は多少改善されたとは言えます。)

FlashToHaxeConverter.jsfl 内のどの処理が原因で、Flash 本体の JSFL 機能がおかしくなってしまうのかは検証できていません。ただ、こういう事例があるということで blog に記述しておきます。

今後の Flash 本体側のアップデートで改善されるようになればよいのですが、そうはならない事を考え、FlashToHaxeConverter 側の負荷を下げるような処理にしてみる等、対処を採っていこうとは思います。

既存ドキュメントから HTML5 Canvas ドキュメントへ移行に対する不具合

ここからは、FlashToHaxeConverter の不具合とは関係ない現象についての記述となります。

新規 HTML5 Canvas ドキュメントへのコピー&ペーストではサウンドファイルリンケージ設定がおかしい状況になる

Flash コンテンツ用 fla ファイルから HTML5 Canvas ドキュメントへ移行したい場合、「ドキュメント形式を AS3 から HTML Camvas に変換」コマンドを用いずに、新規で HTML5 Canvas ドキュメントを作成し、そこにコピー&ペーストでライブラリ内ファイルを移動させようとすると、サウンドファイルの内容(後述)によっては、リンケージ設定がおかしな状況になります。
サウンドファイルに対してリンケージ設定が中途半端に設定されたような状態となり、この状況でパブリッシュを行おうとしても、何もファイルがパブリッシュされなくなります。
この状況になってしまった場合の対処としましては、一度 HTML5 Canvas ドキュメントを保存して fla ファイルを開き直すと良いようです。fla ファイルを保存し開き直すことで、サウンドファイルに中途半端に設定されたリンケージ設定が解除されます。

 参考) jsfl からのリンケージクラス設定解除が効かない場合は fla ファイルを保存して起動し直す
 http://www.dango-itimi.com/blog/archives/2012/001131.html

プロジェクトの内容によっては、HTML5 Canvas ドキュメントのパブリッシュ先のパス等 設定する必要が出てくるため、都度「ドキュメント形式を AS3 から HTML Camvas に変換」コマンドを実行するわけにもいかず、一度作った HTML5 Canvas ドキュメントに対して、Flash コンテンツ用 fla ファイルの内容をコピー&ペーストする作業は多々発生する事になりそうです。

「ドキュメント形式を AS3 から HTML Camvas に変換」コマンド用 JSFL に手を加える事ができるのであれば、もう少し手順が簡略化できそうではあります。あるいは移行用 JSFL を自作するかどうかです。

HTML5 Canvas ドキュメント対応 リンケージ設定 JSFL

「ドキュメント形式を AS3 から HTML Camvas に変換」を実行してみると、サウンドファイルのリンケージ設定が解除されるものとされないものとがあります。タイムライン上で使用しているサウンドファイルはリンケージ設定そのままとなり、タイムライン上では使用していない スクリプトから呼び出すだけのサウンドファイルはリンケージ設定が解除されてしまいます。解除されてしまう理由は色々とありそうです。ただ、私の開発手法としましては解除されると問題が起こってしまうので、HTML5 Canvas ドキュメント上でリンケージ設定を再度行う必要があります。

ここで、Flash コンテンツ用ドキュメントで使用していた自作の「リンケージ設定を一括で行う JSFL」を用いてみると、HTML5 Canvas ドキュメント上ではエラーが発生する事がわかりました。HTML5 Canvas ドキュメントでは、不要な JSFL 処理は利用できなくなっているようです。
よって、「リンケージ設定を一括で行う JSFL」を HTML5 Canvas ドキュメントでも利用できるよう新たに制作を行いました。

 https://github.com/siratama/Linkage

ドキュメントの形式が「HTML5 Canvas ドキュメント」であるかどうかの判定方法としましては、jsfl の document.exportPublishProfileString メソッドを利用する事でひとまず解決しました。パブリッシュプロファイル内に「JavaScript/HTML」という文字列が存在する場合、「HTML5 Canvas ドキュメント」として判定し処理を切り分けています。(今後の Flash 側の仕様変更でこの判定方法が利用できなくなる可能性があります。)

また、今回新たに JSFL を作り直す上で再度検証してみたところ、リンケージ解除設定時 linkageClassName の値を空にする事で、長年の懸念点であった「リンケージ解除が中途半端に行われてしまう問題」がなくなりました。

item.linkageClassName = "";
item.linkageExportForAS = false;

Flash CS4 あたりから悩んでいた問題でしたが、これで簡単にリンケージ解除を行うことができます。

[ FLASH ] [ tips ] 投稿者 siratama : 2013年12月05日 09:23

トラックバック

http://www.dango-itimi.com/blog/mt-tb.cgi/1158

» Haxe で JSFL を作成する際の注意点 from X-LABO
前回の記事にて、自作 JSFL を実行すると Flash CC の JSFL 実... [続きを読む]

トラックバック時刻: 2013年12月07日 09:03

コメント

以下コメントを書き込むだけでは、管理人には通知が行われません。通知を行いたい場合、管理人の書き込みに「返信」を押してコメントをしていただくか、あるいは Google+, Twitter へご連絡ください。




[EDIT]