この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
こんにちは。エンジニアの はる です。
Flash関連の記事や業務が多い私ですが、最近Flash Lite(携帯版Flash)を使用する機会があり、PC版Flashとの勝手の違いに四苦八苦してしまいました・・・。
そこで、今回は最も一般的に使用されている「Flash Lite 1.1」を主軸に、これからFlash Liteにチャレンジしてみたい方向けにFlash Liteの制限事項とその対応策を書いてみたいと思います。
1.Flash Lite のバージョン選択
Flash Lite開発を行う上で、まず初めに考えなければならないのがFlash Liteのバージョンです。
一般的にFlash Liteのバージョンは機能的な面から「1.0」「1.1」「2.0」「3.0」と分けられ、下位互換性があります。対応機種を広くカバーしたいのであれば、「Flash Lite 1.1」を選択するのがスタンダードです。
2.Flash Lite の制限事項
Flash Lite開発において、制作者の頭を悩ませる制限事項がいくつかありますので、代表的なものをご紹介します。
1. ファイルサイズ制限
Flash Lite開発で最も配慮しなければならないのが、swfのファイルサイズです。機種によってこのファイルサイズ制限はまちまちですが、Flash Lite 1.1開発では100KB以内に抑えれば問題ありません。ファイルサイズ制限と超えてしまった場合、swf全体、もしくは一部コンテンツが真っ赤な状態で表示されます。
また、これは外部から読み込んだデータも含めてのファイルサイズ制限となりますので、足りないコンテンツは外部swfから読み込めば・・・という策は通じません。
2. メモリ使用量制限
Flash Lite関連のサイトを参照してもあまり記載されてはいませんが、意外と気にしなければならないのが、メモリ使用量です。Flash Lite 1.1開発では、1024KB以内に抑えれば問題ありません。
メモリ使用量はAdobe Device Centralを利用するのが便利です。開発環境がAdobe Flashであれば、パブリッシュ設定を「Flash Lite x.x」に設定しておけば、ムービープレビューをAdobe Device Centralで閲覧できるようになります。
3. 外部通信・外部データの読み込み
PC版Flashでは、swf表示時に外部通信を行い、アクセス解析データを送信したり、外部からデータを読み込んだりする方法がよく用いられますが、Flash Liteではセキュリティ上の制限があります。
まず、Flash Lite 1.0では外部データを読み込めません。
Flash Lite 1.1では、1ユーザーアクションに対して1通信のみ可能ですが、読み込めるデータはswf形式かテキスト形式のみです。
Flash Lite 2.0でも同様に、1ユーザーアクションに対して1通信のみ可能ですが、swf、テキストに加え、画像ファイルやXMLの読み込みが可能となりました。
Flash Lite 3.0では、上記通信をユーザーアクション無しでも読み込みが可能になったため、かなりPC版Flashと近いコンテンツ作成が可能となりましたが、まだ搭載機種のシェアが低すぎるため、これを当たり前のように制作者が使えるのは数年後になりそうです・・・。
では、現在一般的に使用されているFlash Lite 1.1で動的に画像やテキストを変えるにはどうすればいいのかというと、 テンプレートとなるswfを1つ用意し、サーバー上で画像やテキストの差し替えを行い、再びswfをコンパイルするといった方法が多いかと思います。興味のある方は、swfmill等で調べてみてください。
4. 配列が使用できない
Flash Lite 1.1では配列が使用できません。(※2.0からは使用可能)
Adobe LIVEDOCSでも公開されていますが、eval関数を使用してストリング処理によって配列をシミュレートする方法が多く用いられます。
例)
eval(“array_”+i) = 1
#=> array_0 = 1
eval(“array_”+i+”_”+j) = 2
#=> array_0_0 = 2
5. functionが使用できない
Flash Lite 1.1ではfunctionが使用できません。(※2.0からは使用可能)
こちらはフレームアクションをcall()関数で呼び出すことで代用可能です。ただし、引数・戻り値は使えません。。
具体的には、フレームアクションを記載してあるフレームにラベル名をつけ、call(“ラベル名”)で呼び出しを行うだけです。
6. enterFrameが使用できない
Flash Lite 1.1ではenterFrameが使用できません。 (※2.0からは使用可能)
こちらは、enterFrameとして使用するMCを1つ用意しておき、そのMC内で1フレーム目に実行したいスクリプト、2フレーム目に「gotoAndPlay(1);」と記載することでenterFrameに近い形で実現することができます。
上記以外にも細かな制限事項があり、実際に開発を始めてみると、インスタンスの呼び出し方法やボタンフォーカスの制御等で悩むこともあるかと思います。
その点については、また次の機会に書いてみたいと思います。