アーカイバとかやってみた

外部ファイルをロードする場合、ゲームをローカルで遊んでもらおうとすると、素材丸見えになってしまいます。
すべてswfに埋め込んでしまえばいいのですが、コンパイルが長くなるようです。
完成版のコンパイルで埋め込めばいいのですが。


で、前からちょっとやってみたかった、素材をひとまとめにして読み込んで、
プログラム中で分解するということをやってみました。
ファイルの仕様を晒したら意味が無いので、ソース公開は無いですが、バイナリいじりメモを。

  • ByteArrayを使う。
  • 文字列関連の処理は、エンコード関連をちゃんとせんといかん。
  • Loader.loadBytesで、バイナリからswf、画像ファイルを復元できる。


このLoader.loadBytesなんですが、例えば画像ファイルのバイナリデータを読み込ませて、BitmapDataをとってこようとした場合、
Bitmap(Loader.content).bitmapDataでいけると思っていましたが、ちょっと気をつけなければならない様子。

private var _loader:Loader;

private function init():void
{
	_loader = new Loader();
	_loader.loadBytes(byteArray);
	_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadByteComplete);
}

/**
 * バイナリデータロード完了イベント
 * 
 * @param event イベント
 */
private function onLoadByteComplete(event:Event):void
{
	trace(Bitmap(_loader.content).bitmapData);
}

loadBytesをした直後だと、Loader.contentにはまだnullが入っていて、COMPLETEイベント以降じゃないとデータを取得できない模様。
そういうものなんでしょうか、イベントを間に噛ませないといけないのはちょっとシンドイなぁ。