• HOME
  • BLOG
  • Flash
  • ライブラリの画像はClass設定でメモリー使用量が軽減

ライブラリの画像はClass設定でメモリー使用量が軽減

Flash CS3、CS4にて、
ライブラリに読み込んだ画像(JPEG,PNGなど)を
MovieClip or Sprite に内包し、あっちゃこっちゃで
使うってことをよくするが、
その場合、内包する画像は
リンケージ設定で、Class設定をしておいたほうがメモリーが軽くなるようだ。
あくまでもSystem.totalMemoryでの値を見て。

実験

どうやら、リンケージClass設定をしてない画像を
MovieClipやSpriteに内包すると
Shape扱いになるようだ。

実際に、内包した画像を getChildAt(0) にて trace 、してみると

リンケージClass設定をしてない内包画像

[object Shape]

リンケージClass設定した内包画像

[object Bitmap]

こように、ライブラリの画像をリンケージClass設定しておくと自動的に、
これを子に持つ親MovieClip、Spriteで

this.addChild(new Bitmap(new BitmapData(0,0)));

されるかたちとなるようだ

そして、
メモリー使用的にも

Shape >> BitmapData

のようで、メモリー使用量が大幅に軽減した。

画像の点数とサイズが大きい僕の案件での場合だったが数MB軽減した。

画像をリンケージ設定した場合、プロパティで設定したスムージング設定が
反映されなくなる( false扱いになる)っぽい?ので
注意が必要だ。
別途スクリプトで Bitmap.smoothing にアクセスして設定が必要となる。

というように、僕のケースでは、
リンケージ設定することで
メモリー使用量が減り、プロジェクトの処理速度の向上ができた。

しかし、問題のある。

その画像を内包する親のMovieClipなりSpriteをnewするときの
処理的な重さが、リンケージしない場合のほうが軽いようだ。

new時の処理の重さ: リンケージしない << リンケージする

つまり、Shape << Bitmapdata というようだ。 なので、画像の数や大きさ、実行タイミングなどを考えて どちらか選ぶほうがよさそうだ。