ちょっと実験してみた。
package pp.utils{ import flash.system.*; public class clsSystemUtil{ public function clsSystemUtil() :void{} public static function get memoryUsage():Number{ return Math.round(System.totalMemory/1024); } } }
という感じのを使って
import pp.utils.*; for(var i:uint=0;i<10000;i++){ var tmp=new s1;//s1はライブラリで書き出し設定済みの100*100の塗りをMC化したもの tmp.visible=false; addChild(tmp); } trace("条件名="+System.memoryUsage+"KB");
を3回ずつまわしてみたよ。
ちなみに、条件かえる毎にFlash CS4を再起動してから実行しました。
実験環境はCore2Quad Q9450(2.66GHz)/RAM 4GB/32bit Vista home/Flash Professional CS4 10.0.2
—————————————-
塗りMC10k個=31720KB
塗りMC10k個=31740KB
塗りMC10k個=31740KB
—————————————-
塗りMC10k個+visibleFalse=31736KB
塗りMC10k個+visibleFalse=31720KB
塗りMC10k個+visibleFalse=31768KB
—————————————-
0.5塗りMC10k個+visibleFalse=31736KB
0.5塗りMC10k個+visibleFalse=31748KB
0.5塗りMC10k個+visibleFalse=31800KB
—————————————-
透過0%塗りMC10k個=31796KB
透過0%塗りMC10k個=31788KB
透過0%塗りMC10k個=31760KB
—————————————-
0.5塗りMC10k個+alpha0=33128KB
0.5塗りMC10k個+alpha0=33228KB
0.5塗りMC10k個+alpha0=33204KB
—————————————-
塗りMC10k個+alpha0=33136KB
塗りMC10k個+alpha0=33236KB
塗りMC10k個+alpha0=33236KB
—————————————-
MCのalphaは重いと聞いてたけど、こんなに違うもんなんですね。
塗りは元々アルファ用の値持ってるんで軽い、と。
まとめ
(重)alpha=0>透過塗り>visible=false>なんもなし(軽)・スクリプトでMCを配置するときにalphaをいじらないようなものはあらかじめ透過塗りにしておくべき。
・ShapeをalphaするよりDrawRect+beginFillでalphaのほうがいいのかも?(要検証)
・alpha=0にしたあとvisible=false+alpha=1にしたほうが、alpha=0のままおいておくより良いかも?(要検証)
あと、メモリ消費量的にSprite>Shapeらしいので(ActionScript 3.0 言語およびコンポーネントリファレンス:Shapeの項より)、単純に塗るときもマウスイベントとか子表示オブジェクトを使わないときはShapeできまりってことですね。