« 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 );
}

トラックバック(0)

このブログ記事を参照しているブログ一覧: 外部SWFをSharedObjectに保存

このブログ記事に対するトラックバックURL: http://system.seyself.com/mt-tb.cgi/447

コメントする


画像の中に見える文字を入力してください。

しばらく時間が経過すると、システム内部と表示されている文字内容に食い違いが発生するようなので、
投稿する前にページをリロードすることをお勧めします。
リロードしてもフォームの内容は維持されます。