書き物

技術とか作った物の話とか愚痴文句感想など

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

外部ファイルをロードする場合、ゲームをローカルで遊んでもらおうとすると、素材丸見えになってしまいます。

すべて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イベント以降じゃないとデータを取得できない模様。

そういうものなんでしょうか、イベントを間に噛ませないといけないのはちょっとシンドイなぁ。