カテゴリー
未分類

SWFをすべて読み込まないと再生されない

FLAファイルの挙動がおかしい。
き出しの状態がストリーム再生しなくなってしまっている。
Loadingすら全ファイル読み込まないと表示されない。
なんだ?
コワイコワイ。


追記:2008/01/26 20:36
原因解明したので書いておきます。もしかして既出なのかもしれないけど・・。
問題:

自分自身と外部ファイルなどを統合したLoadingを実装しているSWFのLoadingが表示されない。通信内容を見ているとSWFすべてのデータをLoad完了しないと再生がされない。

仕様:

・swfobjectを使用。
・ハッシュコントロールの仕組みを入れている。(swfAddressではなくオリジナルのもの)
・初期変数をURLハッシュから継承。それをJSON変換しswfobject経由でFlashVarsに格納してSWFに引渡し。
の書き出しは1フレーム目。
・フォント、、サウンドなどのライブラリはコンパイルクリップにいくつか変換。ただし1フレーム書き出しは行わず、特定のMC(preLoad)のなかで

原因:

初期変数の引渡しにURLハッシュを使用しているのが原因。ハッシュがついているとその第一階層のSWFはストリーム再生が出来なくなるようです。ハッシュをつけない状態では正常にLoading。
例えばindex.swfをswfobjectで読み込んだ場合、URLにハッシュがついているとindex.swfはすべて読み込まれないと再生されない。(つまりストリーム再生が出来ず、Loadingが表示されない)
これを自分自身を上書きロードするやり方
_root.loadMovie(“hoge.swf”);
で置き換えてもNG。

結局一階層下に入れて外部MCとしてのLoadingさせる。
(本当はあまり階層化させたくなかったのだけど・・・)
Flashコンパイラが壊れたのか、JSONライブラリのバグなのか、コンパイルクリップの問題なのか、ハッシュコントロールの問題なのか・・・。。問題として考えられる範囲があまりに大きく検証にがかかった。
外部ファイルの先読みが必要な場合、および自分自身のデータサイズが大きい場合にはちょっと面倒。
こういうときはのaddChildの考え方はとてもだと思った。


追記:2008/01/27 21:36
これロードされない原因が分かりました。
もう全然使わないから忘れていましたけど、元々Flashの持っているanchor機能が悪さをしていた模様。
例えばindex.#ahoaho
とした場合、読み込まれたSWFはまず最初にムライン上の”ahoaho”というアンカー名のついたフレームを走査するようです。で、それまではとりあえずタイムラインは流れない。全SWFデータをLoadしてもアンカー名の定義されたフレームが見つけられない場合、通常のタイムライン進行が開始される。
という感じの挙動のようです。
なのでそのアンカー名を1フレーム名に定義してやれば、SWFは1フレーム目をLoadした瞬間にそのアンカーが定義されたフレームにタイムラインを移動させ、タイムライン進行を開放させます。
ただし何かしらの変数をハッシュで引き渡す場合は動的にフレームにアンカー名は付けれないので(確かAS3でもラベル名まで)、ハッシュから変数を取得後、任意のハッシュ名で上書きしてやる。
URLハッシュの上書きはJSで行い、そのハッシュ名をFlashの1フレーム目にアンカーとして定義しておく。
という感じでクリアできるかと思います。
まぁこういう作り方をするよりも、外部SWFをハッシュ引数付でLoadしてやったほうがLoadingも制作も簡単ですが、深度が深くなることで下層MCにおけるフレームレート低下を避けたい場合などは上記の手法が効果的かと思われます。
なんつーかあまりに使わない機能なのでまったくから抜け落ちていました。
(そもそもタイムラインなど使わないし・・)

「SWFをすべて読み込まないと再生されない」への1件の返信

この問題swfaddressの仕様をきちんと読んでないので分からないけど、もしかしたら書いてあるかもしれない。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です