« AIR アプリケーションを作ってみて思ったこと | メイン | 今さら気づいたこと »

2007年9月10日

[as3] 外部SWFをSharedObjectに保存

先のエントリーで書いていたことが出来るか試してみたら、出来た。

そのまんまなんだけど、バイナリ型で読み込んだSWFファイルを
一度 compress を実行した後、配列から1バイトずつ取り出して文字列として結合。
それを SharedObject に保存。

使うときはその逆。びっくりするほど簡単だった。
ByteArrayUtil というクラスとして作成しておいた。
各クラスファイルは以下にあります。
使用している自作クラス
com.seyself.utils.ByteArrayUtil
com.seyself.data.BinaryData
内部でもろもろクラスを使用しているので、試してみる場合はココからまるごとSVNで落としてもらった方がいいかも。

ByteArrayUtil クラスの使用例
import flash.display.Loader;
import flash.utils.ByteArray;
import flash.net.SharedObject;

import com.seyself.data.BinaryData;
import com.seyself.utils.ByteArrayUtil;

var so:SharedObject = SharedObject.getLocal( "binary_to_string" );

//SharedObject にデータが保存されている場合
if( so.data.hasOwnProperty("savedata") ){
  trace( "--load to local data" );
  toStringCallback( so.data.savedata );
}
//SharedObject にデータが保存されていない場合
else {
  trace( "--load to file data" );
  var binaries:BinaryData = new BinaryData();
  binaries.complete = loadComplete;
  binaries.load( "example.swf" );    //外部SWFファイルをバイナリ形式で読み込む
}

//変換中に呼び出される関数です。
var progress = function( parcent:Number )
{
  //parcent : Number - 現在の変換率が渡されます。
  trace("completed convert percentage : "+parcent);
}

//外部からの読み込みが完了すると呼び出される関数です。
function loadComplete()
{
  ByteArrayUtil.toString( binaries.bytes , toStringCallback, progress );
}

//ByteArray から文字列への変換が完了したときに呼び出されます。
function toStringCallback( code:String ):void
{
  so.data.savedata = code;
  ByteArrayUtil.toBinary( so.data.savedata , toBinaryCallback , progress );
}

//文字列から ByteArray への変換が完了したときに呼び出されます。
function toBinaryCallback( binary:ByteArray )
{
  //Loaderインスタンスに、変換されたByteArrayを読み込ませる。
  var loader:Loader = new Loader();
  this.addChild( loader );
  loader.loadBytes( binary );
}

投稿者 michi : 2007年9月10日 21:23

« AIR アプリケーションを作ってみて思ったこと | メイン | 今さら気づいたこと »

トラックバック

このエントリーのトラックバックURL:
http://system.seyself.com/mt-tb.cgi/117

コメント

コメントしてください




保存しますか?