まだまだ健在のガラケーのSWFを1バイトでも軽くするには

知らないと損する
ケータイFlash軽量化テク30連発!


まだまだ健在のガラケーのSWFを1バイトでも軽くするには

株式会社サイバーエージェント
渡辺 梓
2011/7/20

実行メモリ300Kbytes以内を目指す軽量化

 ファイルサイズの軽量化ができたら、次は実行メモリの軽量化を行います。実行メモリの軽量化は、Adobe Device Centralでプレビューして[Flashメモリ]の数値をみて確認していきます。

図10 Adobe Device Centralの[Flashメモリ]
- PR -

 目安としては300Kbytes以内のメモリに抑えましょう。300Kbytesを超えると端末によっては動きがカクカクとしてしまいます。

【17】複数のモーションを、極力まとめる

 まずは、同時に動くモーションが多数ないかをチェックしていきます。まとめられるものは極力1つのグラフィックオブジェクトにしてモーションの数を減らします。

【18】スクリプトを減らす

 また、モーションだけでなく同時に多数のスクリプトが動いている部分も極力減らしていきます。

 ここまでの軽量化では数バイトの差が目に見えて分かりますが、さらに細かい処理まで軽量化していきます。

【19】タイムライン関数の引数は数値指定で

 まずgotoAndStopやgotoAndPlayなどのタイムライン関数の引数は極力ラベルを使った文字列ではなくフレーム数を使って数値指定します。

【20】数値計算は、かけ算で

 数値の計算をする場合は、除算ではなく乗算を使用します。例えば、2で割る場合は、「10 / 2」ではなく「10 * 0.5」といった感じです。

【21】数値の比較演算子

 数値の比較演算子についてはeqやneよりも==や=!を使用した方が処理が速くなります。

【22】演算は、文字列を変数化

 演算に使用する数値は文字列よりも変数化した方が速くなります。先述の乗算の0.5のように何度も使う数字は変数化して計算式に入れます。これは計算式でもif分の条件式などにも当てはまります。

【23】random()関数は、なるべく使わない

 random()関数(Flash Lite 1.1)やMath.random()関数(Flsh Lite 2.0以降)を繰り返し使用し続けることで、だんだんと表示が重くなっていくため乱用は避けます。

【24】thisも、なるべく使わない

 thisの記述も必要がなければ省略していきます。

【25】Flash Lite 2.0以降は、変数に型を付ける

 Flash Lite 2.0以降では、変数宣言をする際はきちんと型を宣言しておくことで変数を使用する演算の速度が速くなります。

Transformを使ったSWF合成により可能になる軽量化

 最後に、Transformを使ったSWF合成でできる軽量化について触れたいと思います。

そもそも、Transformとは?

 まず「Transform」という言葉を知らない方もいると思いますので、簡単に説明すると、SWFファイルをサーバサイドで合成することのできるオープンソースのJavaライブラリです。

 SWFの合成には、「swfmill」などの選択肢もありますが、TransformはXMLなどを使わずに、JavaのプログラムのみでSWFを生成でき、SWF内のライブラリをバイナリレベルで書き換えられる点が最大の特徴です。

 原稿執筆時の2011年6月現在は、Flash Player 10までサポートされています。Javaの実装については、Transformのサイトにサンプルコードがあるので、そちらを参照してください。

 ここからは、Flashオーサリングの視点からTransformを使用したSWFの軽量化について進めます。

【26】MovieClipの中のパターンを減らせる

 Transformでは、Flash内のライブラリ情報をバイナリレベルで操作します。そのため複数パターンの表示の切り替えがある場合も、MovieClipの中に全てのパターンを入れ込んでおく必要がなくなります。

 つまり、MovieClipの数を減らせる分ファイルサイズは劇的に軽くなります。

【27】MovieClipをステージに配置する必要がなくなる

 Transformは動的にMovieClipを生成できるので、余分な合成用ターゲットをステージに用意する必要もなくなります(通常はスクリプトで切り替えた場合、配置するたびにリセットされます)。

 つまりTransformを使えば、スクリプトで切り替える必要がなくなるので、表示に必要になるまではステージに配置する必要もありません。

【28】MovieClipをステージから消して消費メモリを減らせる

 「_visible = false」で非表示にしていても、ステージに配置されたMovieClipがあるとFlashメモリは増えるので、必要がないときにステージから消せることで表示がスムーズになります。

【29】スクリプトを減らせる

 総じて、タイムラインに表示するたびに行う判定式や、gotoAndStop()などのスクリプトが不要になります。

【30】外部ファイルをロードする必要がなくなる

 MovieClipLoaderなどを使って外部ファイルをロードする場合、ユーザー操作の後に通信が必要になりますが、その通信時間もなくなるため、体感速度が速くなり余分な操作も不要になります。

チームワークと小さな積み重ねで大幅な軽量化へ

 Flash Liteでは、PCのFlashと違って容量の制限や低いスペックの機種でも気持ち良く動くように地道な軽量化の作業が必要です。Flashデベロッパはもちろん、デザイナやエンジニアとも軽量化についての知識を共有して、各作業でなるべく軽量化できるような制作をすることで短い時間でクオリティの高いアウトプットが出せるようになります。

 1つ1つは小さな違いしかありませんが、今回の記事に出てきた軽量化のテクニックが皆さんのお役に立てれば光栄です。

■ @IT関連記事


ソーシャルゲームに生かすFlash Lite制作テク
現在大人気のソーシャルゲームを制作する際に知っておきたい、Flash Liteコンテンツの制作のテクニックを紹介します
 
Smart & Social」フォーラム
常識破りの携帯Flashアニメーション術
一撃デザインの種明かし(4) 携帯Flash開発で、アウトラインの制限をなくし、より豊かなアニメーションにする方法や、空間を感じさせる演出、最適な再生速度を考える
クリエイターであるためにFlash待ち受けを出し続ける
D89クリップ(9) 
トイレメーカーのサラリーマンはいかにしてFlashアニメ作家になったのか? クリエイターになる1つの方法を聞くとともにFlash待ち受けの簡単な作り方を教えよう
ケータイFlashでさくさく動くIllustratorデータの作り方
一撃デザインの種明かし(2) ケータイ用のFlash Liteで動くゲーム。アイテム作りのルールを伝授。Illustratorデータを軽くするためにデザイナが気を配るべきポイントは?

3/3  

 INDEX
まだまだ健在のガラケーのSWFを1バイトでも軽くするには 
知らないと損するケータイFlash軽量化テク30連発!
  Page1
まだまだ使われているFlash Liteをストレスフリーに
デザインから始める軽量化
  Page2
Flashオーサリングの設定でできる軽量化
モーショントゥイーンに関する軽量化
オブジェクトの構成に関する軽量化
Page3
実行メモリ300Kbytes以内を目指す軽量化
Transformを使ったSWF合成により可能になる軽量化
チームワークと小さな積み重ねで大幅な軽量化へ


 Smart&Social フォーラム トップページへ



Smart & Social フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Smart & Social 記事ランキング

本日 月間