Flashもそろそろバージョンアップ!と思って、MBPと同時にCS4を購入していたのですが、今稼働しているプロジェクトもあるし、となかなか移行できない状態でした。
しかし、先週で大きな一区切りがついた上に、世の中が夏休みモードとなり、隙間時間ができたので、いまこそ!とCS4への一歩を踏み出してみました。

当初は「今回は大きなバージョンアップだけど、Adobe様もいろいろとプロモーション活動にいそしんでおられる訳で、そんな状況の中でそんなに泥沼にはまらないだろう。きっと楽勝だよ。」と思っていました。
しかし、CS4でパブリッシュしたら、一部のflaファイルで泥沼のごとくハマった次第で、その泥沼から足を抜きとるまでの過程をメモしておきます。
泥沼その1:ループ内でのconst変数
とりあえずパブリッシュしてみたときにたくさん出てきたのは次のパブリッシュエラー。
「1049:定数として指定した変数への代入が無効です。」
どうやら、変数、定数のスコープのチェックが変わったようなのです。
まず次のコードをみてください。
var arr:Array = new Array( 10 ); for( var i:int = 0; i < 10; i++ ){ const TEST:int = i*i; trace("test["+TEST+"]"); }
CS3では上記コードはパブリッシュできていましたが、CS4ではエラーになります
それは、forループ内のconstの行です。
「TESTがconstなのに、代入されている」という意味のエラーになります。
これループの内部だけみていたらおかしくないのですが、AS3では変数のスコープはループ内に限定できないので、結局このTESTという定数には何度も代入される、という処理になってしまうのです。
おそらくCS3でも結局は変数として処理されているのだと思います。
「変数のスコープ」についてはCS3以前でも次のコードはパブリッシュ時にエラーになるのでわかるのではないのでしょか。
for( var i:int = 0; i < 10; i++ ){ trace("test1["+i+"]"); } for( var i:int = 0; i < 10; i++ ){ trace("test2["+i+"]"); }
このコードはCS3でもiの定義がかぶっているというエラーが出ます。結局はこれと同様の仕組みの話なのです。
何にせよ、「CS4では、ループ内でCONSTを定義しない」というのが重要になります。
泥沼その2:パッケージ名とクラス名
パブリッシュしていると、特定のクラスを使用しているところで「1151: 定義 STATE_OFF (名前空間 internal) にコンフリクトが存在します。」「1021: 関数の定義が重複しています。」あたりのエラーがガシガシ出ることがありました。
原因はクラス名とパッケージ名。A/A1.asというクラス(パッケージAのクラスA1)と、A/A1/A2.asというクラス(パッケージA.A1のクラスA2)というのが同時に存在するとエラーになるようです。
しかしこれはどちらかといえばネーミングの方が問題なので、腹をくくってクラス名とパッケージ名がかぶらないように修正したところ、問題なくなりました。
泥沼その3:5005エラー的なエラーにハマる
これまでの問題は、原因は見つけやすいし、直しやすいのですが、コーディングのくせによっては多数の修正が必要になるので、場合によっては「泥沼」になります。
しかし、もう一つのこちらはネット上に情報が見つけられずなかなか原因を特定できなかったし、対応策はできたのですが、本当にこれでいいのかどうかは確信が持てない、本当の「泥沼」のメモです。
いくつものflaファイルからそれぞれswfをパブリッシュしているプロジェクトがあったのですが、それらをすべてパブリッシュエラーなしの状態にまで持っていき、すべてをswfに書き出したときのトラブルです。
一部のswfを実行させると、初期化時に実行エラーが発生するのです。
何度パブリッシュしても同様のエラーが出ていて冷や汗。うんうんうなったり、しばらく放置してみたり、最適化して保存してみたり、再起動してみたりしても同じ。
そして、冷や汗も乾ききった頃のこと、swfのサイズがおかしいことに気づきました。CS3でパブリッシュしてたときには300kbyte以上あったサイズが200kbyteちょっと。いくらなんでも少なすぎ!しかもCS3でパブリッシュしていたときにswfサイズが300kbyte以上あったものばかりがNGな状態なのです。
どうしたものかと思案を巡らせて、思いついたのは以前ハマった「5005エラー」。
きっとパブリッシュ時の何らかのエラーが原因に違いない訳で、しかもファイルサイズが大きい場合のみ問題が出ている現状では、それと同じ対策をしてみたらどうだろう?と、思ったのです。
早速以前のブログエントリをみて、“JAVA_TOOL_OPTIONS”という環境変数を”-Xmx128M”にし、これでWindowsを再起動したところなんとちゃんとパブリッシュされました!
いやー、CS3ではエラーだったものがCS4ではエラーも出なくなることがあるんですね。参りました。
とりあえず、脱出できたようなので、一安心ですが、まさに泥沼でした。
CS4のヘルプが嫌だ
Adobe CS4からヘルプファイルがウェブ上のリソースになっている。HTMLなのはいいのですが、検索性も使い勝手もが落ちているように思う。
ヘルプを使うときはまずは検索から入ると思うのですが、その結果はただページ名の羅列でしかなく、ページ概要や、検索キーワード前後の文字列が分からない。
Googleで検索した結果にページ概要がないと想像してみてほしい。いったいどれだけ使いにくいのか。
また、ページに遷移しても検索キーワードがハイライトされている訳でもなく、再びブラウザ機能で検索しないといけないのです。
ちなみにアプリ側の設定でローカルファイルに指定することもできるのですが、基本的にHTMLでアクセスなので、使い勝手はかわらない
ホント使いにくいヘルプだなぁ。










