2011年2月アーカイブ

ついこの間ケータイ向けゲームサイトでFlash合成部分を担当したので、もっと色々勉強しないとと思って行ってきた。
http://atnd.org/events/12534

会場を提供して頂きましたZynga Japan様、どうもありがとうございました。

以下、メモ書き(ほぼ原稿そのままなので読みにくいかも。すいません)

「『トレジャーアイランド』でのFlash Lite 1.1を用いた開発事例」

  • Zynga Japan emorinsさん

トレジャーアイランド

  • ガラケー向けのゲーム
  • 何か発掘したりとかして財宝とかゲット → 友達と楽しむ
  • ガラケー向けソーシャルゲームの開発なのでFlash liteを使った
    • Flash liteにはバージョンが色々ある

Flash lite のバージョン

  • 普及率を見てどのバージョンを採用するか決める
  • 古いヤツが1.0、ガラケーの最新版は3.1
  • できるだけ新しいバージョンを使いたいけど普及していないので、特定の機種でプレイ出来なくなる可能性がある
  • DoCoMoだとまだFlash Lite 1.1を使っている人がいる
  • 最新のFlash liteで開発しちゃうとプレイできないユーザーが出てくる
    • 低いバージョンを選ばざるを得なくなる
  • トレジャーアイランドでは1.1を採用

Flash Lite 1.1 / 2.0

  • 表現できる幅が狭まってしまう
  • 100kb制限、メモリ量も少ない → サーバーサイドで動的生成、.swf内の変数やビットマップ、ムービークリップなどを入れ替えて表現を広げる
    • ガラケー向けFlash Liteでは一般的な手法

どんな動的生成方法?

  • いろんな生成方法がある
    • swfmill
    • SWF Editor
    • バイナリの編集
  • やり方は、
    • ベースの.swfを作る
    • SWF Editorで編集したり、
    • swfmillで.xml ←→ .swfの変換
    • バイナリを直接編集して出力

動的生成しているところ

  • キャラクターの画像(アバター的なもの)
    • プレイヤーごとにキャラクターが異なるので、ユーザーごとに生成して出力分け
    • キャラクターのデータをFlashに全部入れてしまうと容量超えてしまうので
  • 背景画像
    • 島によって異なるので動的生成で入れ替えている
    • 何枚も.swfを用意する必要がなくなるので、管理も簡単

bitmapの入れ替え

  • ベースとなる.swfから SWF Editor を使って予め用意してあるbitmapに差し替える
    • http://pwiki.awm.jp/~yoya/?swfed ?

メモリ管理

  • 容量とは別にメモリの管理も頭を悩ませる課題
  • Flash liteにおけるメモリ容量はキャリアとか機種でだいぶ差異がある
    • メモリの容量が壁になって制作に支障がでる
    • bitmap とかムービークリップとか使うとどんどんメモリを食っていく
    • 効率的にメモリを使って開発する必要がある
  • Flash Liteにおけるメモリ管理
    • GC → マーク&スウィープ
      • Flash上で使ってるオブジェクトと使ってないオブジェクトを識別
      • 使ってないオブジェクトを開放、どんどんメモリ喰うのを防いで再生
    • ケータイのヒープは2種類
      • Static heap(静的ヒープ)
      • Dynamic heap(動的ヒープ)
      • Device Centralとか見ると書いてある
    • Static heap
      • Flash Playerに割り当てられた固定のヒープ
      • ムービークリップやビットマップを使うと、都度確保される
    • Dynamic heap
      • Static Heapを使い終わったら、ケータイのOSから動的に割り当てられる
      • ヒープチャンクが32kb。32kbづつ消費していく
      • Dynamic Heapが使えるのはFlash Lite 2.0以降なはず
      • 1.1で使える機種は無いか、少ない → Static heapを使っていくしかない
  • メモリ不足になるとどうなるか?
    • Flash Playerが動かなくなる
    • bitmapが赤くなる
    • Flashが再生できない
  • ビットマップデータは、Flashのステージ上に置くと無圧縮32bitに展開
    • 100px * 100px * 4バイト = 40kb (64kb)
    • Dynamic heapは32kb単位で確保なので、40kbのものを置こうとすると64kb使う
  • フラグメントがおきやすい
    • 大量の変数にnullを代入して参照を切ってもなかなかメモリがあいてくれない

どうやってメモリを効率的に使うか?

  • GCがあるので、参照を切れば開放される
    • nullを代入
    • ムービークリップをremoveMovieClip する
    • こまめに参照を切ってメモリの空き容量を増やしていくことが必要
  • スイープのタイミング
    • 60秒間隔
    • メモリ不足でエラーになった時
    • メモリ使用量が突然20%以上跳ね上がった場合(2.0以上のみ? 1.1では発動しなかった)
    • GCを起動する関数とかは用意されていないので、このタイミングでしかスイープしてくれない
      • 使い終わった変数にnullを入れておいても、すぐに容量が空くわけではない
  • できるだけメモリ食わないで開発する方法
    • 使うものはあらかじめステージ上においてしまう、後からロードしたりしない
      • メモリの使用量を抑えることができた
  • なんか効率のいいメモリ管理方法とか開発方法を知っていたら教えて下さいw

まとめ

  • トレジャーアイランドはmixiで絶賛稼働中なので、是非遊んで下さい

このアーカイブについて

このページには、2011年2月に書かれた記事が新しい順に公開されています。

前のアーカイブは2011年1月です。

次のアーカイブは2011年3月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 6.1.2