michinoko blog

Information

date: 2009/03/21
category: flash.

Tagged

LoadVarsとSharedObject [as2]

ちょっとAS2の質問をされ、久々に触ったんで一応書いておこ。

やりたいことは、
・カウンターみたく現在の番号を取得してボタンを押せば次の番号を取得。
・ボタンは2回目のアクセスからは押せない。一度のみ。
とのこと。

まぁ色々とやり方はあるのだろうけど時間も無かったことで、とりあえずカウンターみたく数を数えるのはLoadVarsを使ってテキストを読み込み→phpでカウントアップ→番号更新として。アクセスの回数はSharedObjectでやってみた。
あんまりリクエストが無い限りソースを晒すのは恥ずかしいんやけど、ソースコードを表示するJS「dp.SyntaxHighlighter」を今更ながら入れてみたので晒してみます。

//メインタイムライン:ステージ上には、
//cnt_txtとclick_btn
//Shift-jisを使う
System.useCodepage = true;
nowNum=0;
//SharedObjectを使う
mySOcookie = SharedObject.getLocal("CookieData");
mySOtime_before = SharedObject.getLocal("CookieTime");
//現在時間
TheDateObj = new Date();
nowtime = TheDateObj.getTime();
// 前回時間+600000ミリ秒
beforeTime = mySOtime_before.data.count + 600000;
sa = nowtime - beforeTime;
//一定時間がすぎていたら、リセット
if (sa > 0) {
	mySOcookie.data.count = 1;
}

//現在の番号用LoadVarsオブジェクト
text_lv=new LoadVars();
text_lv.onLoad=function(success){
	if(success){
		//count.txtには、”num=番号”
		nowNum=Number(this.num);
    //phpに送信用のLoadVarsオブジェクト
		LV=new LoadVars();
		//現在の番号を格納
		LV.nowCount=nowNum;
		//現在の番号を表示
		cnt_txt.text=this.num;
	}else{
		//エラー処理
	}
}
//最初は外部テキストから現在の番号を取得
text_lv.load("count.txt");

//1回目のアクセスのとき
if (mySOcookie.data.count == 1 || mySOcookie.data.count == undefined) {
	LV.onLoad = function(success){
		//次の番号をphpから受け取って表示
		cnt_txt.text=LV.nextCount;
		//現在の番号を次の番号へ更新
		LV.nowCount=Number(LV.nextCount);
	}else{
  	//エラー処理
     }
	//送信ボタン
	click_btn.onRelease=function(){
		//LoadVarオブジェクトをphpスクリプトへPOSTで送信する
		_root.LV.sendAndLoad("count.php",_root.LV,"POST");
		click_btn._visible=false;
	}
	//ローカルデータを更新
	mySOtime_before.data.count = TheDateObj.getTime();
	mySOcookie.data.count = 2;
}else {
	//2回目以降のアクセスは、ボタンを表示しない
	click_btn._visible=false;
	//アクセス回数更新
	++mySOcookie.data.count;
}

ちなみにcount.phpでは数字を受け取って+1して返しているだけ。
ブラウザのキャッシュは無視してるけど、これでたぶん大丈夫なはず;

久々にAS2を触ったけど、最初、

var text_lv:LoadVars=new LoadVars();

って書いて動かんかった;