graffitiさんのところで見つけた記事について。
Flashを使う仕事をしていると、こういう、Flashの根本的らしい部分でのバグに引っかかることがあって、解決に凄く時間がかかってイライラすることが多い。
そして、そのたびに検索しては情報の少なさにがっかりしたりする。
僕の知っているバグの中にgraffitiさんが抱えている問題に合致するものは無いので、残念ながらお力になれないんだけど、この機会に今後Flashで問題が起こって困っている人のため、今僕が思いつくバグなんかを書き綴ってみようと思った。
既知の話かもしれないけど、もしかしたらgraffitiさん含め今困ってる人の解決の糸口になるかもしれないしね。
情報をWebに流すのはいいことだ。
(たまにこういう話題書いてないと、Flashブログだってこと忘れるしね)
グラフィック素材に鬼が潜んでいた話
仕事上、グラフィッカーさんに絵素材を出してもらって、それをFlashに仕上げるっていうのはよくやることなんだけど、以前これで酷い目に合ったことがあるのでまずそれから。
イラレで上がった素材をswfに変換してもらっておいて、それをFlashに片っ端から読み込んで、スクリプトを加えていったんだけど、途中でMCへのパスがまったく通らなくなるというバグが発生。
で、デバッグしたんだけどどうもASは間違っているように思えない。
ASが間違っていないのにASが動かないっていうのは結構キツイものがありまして、結局数日そのバグとだけ戦う羽目になった。
で、結論から言うと、グラフィッカーの渡してきたswfファイルの中に、テキストのゴミみたいなのが混じっていて、そこに何らかの特殊文字があったらしく、それが悪さをしていた、という嘘みたいな話だった。
しかも静止テキストだから点線枠も無いし、特殊文字はスペースのように透明という悪質さ。
そこに文字列があるってことすら分からない状況で、偶然その空間をクリックした僕のIntiousは表彰ものだと思う。
テキストそのものを削除したら綺麗に直った。
Mac→Winのやり取り時に何か起こったのか、文字化けなのか(以前からその人のデータは文字化けすることがあった。手作業で修正してたけど)、未だにその不思議文字の出どころは分からない。
他に似たような話で、flaをもらったら中のpngが全部jpeg圧縮出力になってて、書き出すと画面真っ赤っていうB級ホラーなこともあった。(jpg出力できない画像をjpg圧縮すると真っ赤になっちゃうことがあります)
教訓としては、他人の素材は、絵素材であってもちょっと注意。特にイラレからswfに変換したものは全選択してゴミが無いかチェック。
特定ループでFlashが警告を出さずに「ASだけを」停止させる
特定の再起処理とか、複雑なループが、規定回数を超えると起こるらしい。
やっかいなのは、Flashの再生速度が~という例のメッセージは出ず、ムービーだけは正常に動いてくれちゃうので、タイミングが悪いと
「あれ?ASだけ書き出されていない?」
とか勘違いしてしまったり、急にASのパスがおかしくなったと思ったり、traceするはずのところで動かないってことで随分焦る。
しかもプレイヤーのバージョンで動作が違ったりなんかして。
特にブラウザでしかテストできない系のFlashを作ってるときに嵌ると死ねることがありますので注意。
1フレーム間に再生するフレームが無限になっている
上記亜種なんだけど、具体的には
フレーム1アクション:gotoAndPlay(2);
フレーム2アクション:gotoAndPlay(1);
とか書くと容易に再現できる。軽くフリーズするので注意。
AS2.0以降あんまり起こんないバグだけど、フレームスクリプト中心に大きい作品作っているときに、まれにやっちゃったりすることがある。
意外とif文が重なってると気づかなかったりするんだよね。
1フレーム内に複数のgotoがあるときなんか、実行順序をよく考えないといけない。
ミソは、goto系の命令は、呼び出されてもそのフレーム処理が終わるまでは、すぐには実行されないってこと。
効果音を連続再生すると均等なタイミングで鳴らない
プププププ・・・と鳴らしたいのに
プ、ププププ・・・と、初回と2回目の効果音に間が開いちゃう。
同じサウンドオブジェクトにあらかじめ無音の効果音を1度か2度鳴らしておくだけで、何故か解決する。
クラスがあるのに、無いって言われる
僕がよくやらかしたのは、クラスファイルがUTF-8のBOM付きになってなかったっていうもの。
FDTを使ってると結構経験します。
(Flash Lite限定)MCを回転させまくるとずれていく問題
PCFlashよりも問題が噴出する、FlashLiteの話も少し。
FlashLiteでは、MCを_rotationの値でぐるぐる回転させていると、どんどん小さくなっていくという謎のサービスがついてくるんで、_rotationを弄るときは一緒に、_xscaleと_yscaleを100に設定し続けてあげないといけない。
さらに回転中に、0度方向がどんどんズレていって、振り子のような動きをつけているときは動作の中心がどんどん傾いていくことになる。
このズレが致命的な場合はちょっとやっかいで、まずそもそものMCを画面外においておき、dupulicateMovieClipで複製して使用しする。
ズレてくるタイミングで定期的に削除と複製を繰り返してリセットしてやる、という方法でなんとか修正することができる。
(Flash Lite限定)ランダムが変
単純に変。
シードが10種類しかないんじゃいの?というくらい貧相なランダムを出す機種が一部ある。
機種依存。嫌だね~。
ゲーム系ならユーザーの最初のキー操作でのgetTimerの数字、待ち受け系は日付や機種から数字を取ってきて、線形合同法あたりで適度な数字を作って、それを使ったほうがいい。
(Flash Lite限定)連続してフレーム上に存在するMCを複製すると元が消える
ちょっとわかりにくいんだけど、フレーム1とフレームに2の同じレイヤーにキーフレームがあって、そこに同名の同MCが置いてあった場合、フレーム2でそのMCをduplicateして増やすと、何故か複製もとのMCが消える。
間に空白キーフレームを入れたり、レイヤーをずらすことで解決。
また何か思い出したら書くかも
コメント
2864 投稿者: Anonymous (2008年01月04日 17:46)
Flashブログだったなんて・・・
2866 投稿者: しっぽ (2008年01月05日 00:24)
ォィコラw