ActionScript3のalphaとvisibleとメモリ消費量

ちょっと実験してみた。

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できまりってことですね。

クラスの継承についてのいい例え発見。

Javaの入門書とかはたいてい「車」で説明するんだけど、常々わかりづらいと思っていました(笑)

これなら笑いとともにすんなり理解できる!
お堅い入門書にもぜひ採用してほしいセンスです(笑)

@IT – Flashの基礎を無料で習得! ActionScript入門(5)
ActionScript 3なら継承&実装で大規模開発もできる
(http://www.atmarkit.co.jp/fwcr/rensai2/as3_05/as3_05_1.html)

とりあえず吹いたのが、

■受け継ぐだけでは物足りないなら「オーバーライド」

(中略)

ここで注目していただきたいのが、「super.cook(soba);」の部分です。これはスーパークラスの「cookメソッドの実行」という意味で、この「super」というキーワードで呼び出すメソッドがないと、スーパークラスの処理が行われないことになり、ノリを散らしただけのものが出来上がってしまいますので、注意しましょう。

ノリしか乗ってない丼想像したら、二代目店長が可愛く思えてくるから不思議(笑)