- 2006-02-04 (土)
- ActionScript
画像を読み込む際に便利な Loader コンポーネントの不具合について。なんかここの所 Flash の駄目な所ばかりつついているようで心苦しいです (汗
Internet Explorer に限り、自動スケール調整が失敗する事がある
Loaderコンポーネントには、ロード完了時に Loader 自身のサイズに合わせて、読み込んだ画像を自動的に拡大縮小調整する機能 (scaleContent パラメータ) がありますが、これが Internet Explorer 上の Flash Player Plugin に限って、うまく動作しない (自動調整がかからない) 場合があります。特に大量の画像、または容量の大きな画像を読み込もうとする際に発生しやすい気がします。
bgx:components - scaleContent Fix for the the Macromedia Loader Component
今回の不具合については、 google 検索にて出会えた上記ページにて、原因解説から解決方法まですべてを教えて貰えました。以下、同サイトの英文説明を簡単に和訳してまとめてみました:
現象の確認方法
bgx:components - loader test
上記リンクを開くと Loader コンポーネントを使って何枚かの画像を読み込むサンプル SWF が表示されます。上段のサンプルがデフォルトの Loader コンポーネントの挙動で、下段が後述する解決策を施したサンプルです。下段のように、すべての画像が均一サイズで整列した状態が期待値なのに対して、 Internet Explorer で見た場合、上段の画像はサイズがバラバラになっている (=自動スケール調整が機能していない) 事が確認できます。
原因
* 初期化の時点で _totalBytesプロパティを -1 にセット (読み込み完了時点で 0 に変わる)
* 読み込み進行状況の確認ループの際、上記値を3回チェックしにいく
* 3回とも -1 だった場合は、それ以上チェックする事なく、強制的に "読み込み完了" の通知を出してしまう
* 結果、画像データがロードされる以前の段階でスケール調整を実施してしまう
だそうです。※でもなんで Internet Explorer に限って上記条件に該当するのかは謎のまま。3回だけチェックして後は勝手に完了通知しちゃってるのはなぜかも不明。きっと海より深い理由があるのでしょう... ?
解決方法
同サイトで提供してくれている "BgxLoaderFix.as" ファイルをダウンロードしてきた上で、自分のソースコードにて
#include "BgxLoaderFix.as" maxTries = 560;
なんてしてあげればOK。まぁお手軽。
※この bgx:components さんは他にもたくさんの ActionScript 系ソースを公開してくれていて、とってもいい感じです。感謝♪
※情報元となった b-reflex-blog さん と Valeriu Dinulescu さん にも感謝です。
Comments:1
- sammy 2006-02-05 (日) 01:57
-
メモ代わりに残しておいたブログがお役に立てて嬉しいです。(初トラックバック!)
studio8ではまだ試してないんですけど、なおらないもんですかね?