知らないと損をするよ! 携帯Flash軽量化メモ 〜条件分岐編〜
こんにちは、お久しぶりのkijima(@otoyasumi)です。
最近はFlashLite1.1ばっかりやっているので、携帯Flash開発に便利なtipsをまとめてみました。
同時に複数の"&&"AND演算子を使わない
例えば、if( A && B && C & D & E & F & G)という条件を指定するときは、
代わりに以下のように記述しましょう。
if ( A + B + C +D + E + F + G === 7 )
FlashLiteでは"true"は1、"false"は0でもあるので、これを利用します。
A〜Gまですべて"true"なら、すべて加算すれば7になるので、
上のような記述で"&&"を使わずに実装できます。
なぜこんな面倒なことをするかというと、"&&"を使うと、やたらと容量を食うから。
実際に比較すると、上の条件の場合はこんなに差が出ます。
if( A && B && C & D & E & F & G) trace("hoge"); // → 1473バイト
if ( A + B + C +D + E + F + G === 7 ) trace("hoge"); // →205バイト
"&&"の回数が増えるにつれて倍々になっていくので、容量がグンと増えたと思ったら
一旦パブリッシュ設定の「サイズレポートを出力」にチェックを入れて確認してみましょう。
そもそもなんでこんな冗長な条件分岐が必要になってくるかというと、
FlashLite1.1ではhitTestが使えないため、当たり判定などで必要になる場合があるのです。
さらに細かいですが、不等号の"<=",">="は、”<", ">"よりも
ほんのちょっとだけ容量を食うので、なるべく使わないようにしています。
このtrue=1, false=0 であることを利用すると、ランダム確率の変更も簡単です。
一定確率の条件分岐をスマートに記述する方法
たとえば、「1/5の確率で当たりが出る」ロジックを実装したいとき、
以下のように記述します。
if( random(5) ){ trace("はずれ"); } else { trace("あたり"); }
random(5) の結果は、0,1,2,3,4のいずれかなので、
これを利用して0が出たときのみ"当たり"とします。
falseは0なことを利用して、色々な条件分岐の記述を簡略化できそうですね。
FlashLite1.1では、容量が最大100KBという制限があるので
こういった地道で地味なテクニックが、意外と効いてきます。
それでは今日はこのへんで!