共有オブジェクトにデータを保存

(サンプル一覧を表示する)

共有オブジェクトにデータを保存するテストをしてみました。

この Flash を開いた回数をカウントします。
ページをリロードすると、カウンターが増えていきます。
「カウンターの値をクリア」を押すと、値がクリアされます。
Flash の実行画面
共有オブジェクトにデータを保存

Flashプレーヤーが入っていないか、JavaScriptが無効になっているようです。

Get Adobe Flash player

共有オブジェクトにデータを保存

ソースコード

package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.net.SharedObject;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	
	/**
	 * 共有オブジェクトにデータを保存
	 * @author Hikipuro
	 */
	public class Main extends Sprite 
	{
		/**
		 * 共有オブジェクト
		 */
		private var sharedObject:SharedObject;
		
		/**
		 * メッセージ表示用テキストフィールド
		 */
		private var textField:TextField;
		
		/**
		 * カウンターの値をクリアするボタン
		 */
		private var button:Button;
		
		/**
		 * カウンターの値
		 */
		private var count:int;
		
		/**
		 * コンストラクタ
		 */
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		/**
		 * 初期化メソッド
		 * @param	e
		 */
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			
			// 共有オブジェクトの準備
			// getLocal を呼び出すことで、HDD に保存された共有オブジェクトを取得します。
			sharedObject = SharedObject.getLocal("Test");
			
			// カウンターの値を更新
			// ここでは data.count となっていますが、count 以外の名前を使うこともできます。
			// count は、 data に元から存在するものではなく、Object クラスに動的に追加したプロパティです。
			count = int(sharedObject.data.count);
			count++;
			sharedObject.data.count = count;
			
			// 共有オブジェクトのデータをすぐに HDD に書き込む
			// とりあえず 500 バイトの容量を共有オブジェクト用に要求
			sharedObject.flush(500);
			
			// テキストフィールドの準備
			textField = new TextField();
			textField.autoSize = TextFieldAutoSize.LEFT;
			textField.x = 10;
			textField.y = 10;
			addChild(textField);
			
			// ボタンの準備
			button = new Button("カウンターの値をクリア", 150);
			button.x = 10;
			button.y = 100;
			button.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
			addChild(button);
			
			// テキストフィールドの内容を更新
			textField.appendText("この Flash を開いた回数は、合計 " + count + " 回です。\n\n");
			textField.appendText("共有オブジェクトのサイズ : " + sharedObject.size.toString() + " バイト");
		}
		
		/**
		 * ボタンが押された時のイベント
		 * @param	e
		 */
		private function onMouseDown(e:MouseEvent):void 
		{
			// 共有オブジェクトの値を削除
			delete sharedObject.data.count;
			
			// 共有オブジェクトのデータをすぐに HDD に書き込む
			// とりあえず 500 バイトの容量を共有オブジェクト用に要求
			sharedObject.flush(500);
		}
	}
	
}
/**
 * ボタン用クラス
 */
import flash.display.SimpleButton;
class Button extends SimpleButton
{
    import flash.display.SimpleButton;
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    
	/**
	 * コンストラクタ
	 * @param	caption	ボタンに表示する文字列
	 * @param	width	幅
	 * @param	height	高さ
	 */
    public function Button(caption:String = "ボタン", width:uint = 100, height:uint = 20) 
    {
        upState = makeButton(0xDDDDDD, width, height, height / 2, caption);
        overState = makeButton(0xEEEEEE, width, height, height / 2, caption);
        downState = makeButton(0xCCCCCC, width, height, height / 2, caption);
        hitTestState = upState;
    }
    
    /**
     * ボタンを作って返す
     * @param    color    色
     * @param    width    幅
     * @param    height    高さ
     * @param    round    角丸の大きさ
     * @param    text    ボタンのテキスト
     * @return    ボタン
     */
    private function makeButton(color:uint, width:int, height:int, round:int, text:String):Sprite
    {
        var t:TextField = new TextField();
        var s:Sprite = new Sprite();
        s.graphics.lineStyle(2);
        s.graphics.beginFill(color);
        s.graphics.drawRoundRect(0, 0, width, height, round);
        s.graphics.endFill();
        
        t.text = text;
        t.selectable = false;
        t.width = width;
        t.autoSize = TextFieldAutoSize.CENTER;
        s.addChild(t);
        
        return s;
    }
    
}
		

共有オブジェクトのデータは、Windows の場合、

C:\Documents and Settings\ユーザ名\
 Application Data\Macromedia\Flash Player\#SharedObjects\
 ランダムな文字列\hikipuro.is-a-geek.org\flash\game\sample\SharedObjectTest.swf\Test.sol

に保存されます。
パスの最後の、「Test.sol」という部分は、

SharedObject.getLocal("Test");

で、指定した名前が使われます。
また、このデータは、ブラウザに関係なくここに保存されるようです。
Firefox で値を保存した後、IE で同じ Flash を開いても、
値が引き継がれます。

外部リンク