[AS]SharedObjectについて
ユーザーのPCに変数情報等を保存できる。
Flash版のCokkieみたいなものらしい。
(そもそもCookieをよくわかっていないが)
何ができるかといったら、swfファイル間で同じ変数情報を共有可能。
使い方、owner.flaをつくりのそのフレームアクションに、
// 共有オブジェクトを作成する var so:SharedObject =SharedObject.getLocal("MyData","/"); //containerBox0という箱を定義して値を設定 so.data.containerBox0="test0"; //ローカルにファイル(MyData.sol)を保存する。 var str = so.flush();
つづいて、user.flaを作ってそのフレームアクションに、
var so:SharedObject=null; so=SharedObject.getLocal("MyData","/"); var tf:TextField = new TextField(); addChild(tf); tf.text=String(so.data.containerBox0);
owner.flaをパブリッシュすると、MyData.solが保存される。
保存場所は上記スクリプトの場合は、
C:\Documents and Settings\(ユーザーID)\Application Data\Macromedia\Flash Player\#SharedObjects\NFWUQ76F\(ドメイン名)
もしくは
C:\Documents and Settings\(ユーザーID)\Application Data\Macromedia\Flash Player\(ドメイン名)
といった感じになるようだ。
参照サイト
ちなみにサーバーにあげないでローカルで試してるときは、(ドメイン名)はlocalhostになる。
ファイルができたことを確認して、user.flaをパブリッシュすると、text0が表示される。
ここで少し注意が必要でした。
owner→userの順でパブリッシュすると期待通りの動きですが、
user→owner→userの順でパブリッシュすると、MyData.solが削除されてしまいます。
理由はちゃんと理解してませんが。。。
多分先に作ったSharedObjectインスタンスに情報が入ってないから、なんちゃらかんちゃらな感じ。
なので情報が入ってるか入ってないかを判定して、入ってなかったら、その場でSharedObjectインスタンスを破棄するような処理が必要。
というわけでuser.flaを以下のように変更するとOKでした。
var so:SharedObject=null; so=SharedObject.getLocal("MyData","/"); if (so.data.containerBox0==null) { so.clear(); so=null; } else { var tf:TextField = new TextField(); addChild(tf); tf.text=String(so.data.containerBox0); }
ファイル保存の際はエラー処理書いておかないとまずいですね。。。
Tweet