- ベストアンサー
画像重ね処理での性能低下に悩む!原因と解決方法を教えてください
- 画像を重ねると、フラッシュの動作が急激に重くなる現象に悩んでいます。
- 画像をフラッシュ内部やFireWorksで編集することはできず、外部のBMPやPNGフォーマットの画像を使用しています。
- 12枚以上の画像を重ねると、動作が重くなり、マウス操作に追従しない感じになります。原因や回避方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
そこまで処理落ちするような作品は作ったことがないので、推測になりますが・・・ 1番の原因はやはり、ビットマップ系画像が多いことだと思います。 画像の大きさや解像度・圧縮率などにもよりますけれど、いわゆる”重い画像”を多用すればメモリを圧迫し、処理にも時間がかかります。 仮に、メモリやCPUの限界に迫るほど画像を多用したムービーが、制作環境では何とか動いたとしても、見る人のパソコンのスペックが劣っていたら、処理落ちどころかシステムのフリーズ等の重大な障害を引き起こしてしまうかもしれません。 大量の画像やある程度の画質を保った画像を扱う場合は、最初からステージに配置せずに、loadMovie などで必要に応じて外部から読み込む方法が一般的です。 サムネイルのように常時画像を並べておく必要があるのなら、画質が低く容量の小さな画像を見本として配置しておき、高画質のものは後で読み込むようにしてはいかがでしょう。 それから、表示・非表示の処理にアルファを使っていませんでしょうか? アルファを0%(スクリプトでは _alpha プロパティを 0 )にすれば完全に透明になり、確かに非表示にはなります。 しかし、透明であるというのは、下にある絵が透過して自分自身が見えないだけのことで、ムービークリップは稼動しています。 その間、透過や描画の処理は通常通り行われますので、処理は重くなります。 更に、12 枚のムービークリップを同じ位置に重ねているとすると、表示する色を求めるための演算が、画像1と画像2の透過後の色を求め、次はそれと3、4、5・・・と続いていくことになります。 1ドットにつきこれだけの処理が行われているのですから、かなりの負担がかかっていることが想像できると思います。 単純に表示・非表示を切り替えたいだけなら、_visible 属性を操作する方法がオススメです。 _visible はムービークリップを表示もしくは非表示状にするかの設定で、true で表示、false で非表示となります。 非表示にしていればムービークリップの描画が行われませんので、_alpha を 0 にするよりは処理が軽くなると思います。 ただし、_alpha が 0 のムービークリップは press や rollOver 等のボタンイベントを検出できますが、_visible を false にしたムービークリップはこれらのイベントが検出されなくなります。 ( enterFrame など、ムービークリップ特有のイベントは検出されます)
お礼
お礼を登録したつもりだったのですが、掲載されていなかったようで、失礼いたしました。 ご回答ありがとうございます。 表示非表示切り換えにアルファを使ってはいないのですが、画像そのものは一部でアルファの%調整をしております。 また、同じ大きさのものを重ねる処理は不可避ですので、お教えていただいた外部画像の読み込みと、_visible 属性による操作をためしてみたいと思います。 ありがとうございました。