loadVariablesでサーバからデータをムービークリップに取得



[loadVariables][サーバ通信][ムービークリップ][Flash Lite2.0]

読み込めるファイルは,swfを設置するサーバと同一ドメインであること。
(ドメイン間のデータロードもできるようだが,未調査)

・ムービークリップを用意して,インスタンス名はtext2_mc

loadVariablesについて
・ムービーのレベルで変数に読み込むことができる
・ムービーには読み込みレベルがあり,0が最小値。最大値は無い。_level0(レベル0)は,読み込むミービー自体のレベル。

Adobeサイトより引用(一部改変):
テキストファイルや、CGI スクリプト、ASP、PHPなどで作成されたテキストなどの外部ファイルからデータを読み取り、ターゲットムービークリップの変数に値を設定します。このアクションを使用して、現在の SWF ファイルの変数を新しい値で更新することもできます。

指定された URL にあるテキストは、標準の MIME 形式 application/x-www-form-urlencoded (CGI スクリプトで使用される標準形式) である必要があります。変数はいくつでも指定できます。たとえば、次の例では複数の変数が定義されています。

company=Macromedia&address=601+Townsend&city=San+Francisco&zip=94103




//読み込むファイルのURLとファイル名を記述
//読み込むファイルは,_root.text1_mc に設定

loadVariables("http://・・・・/testfile.txt", "_root.text2_mc");

//Adobeのサンプル引用
//loadVariablesも読み込み完了を待たないので,
//読み込み完了を検知するfunctionを用意

function checkParamsLoaded() {

//level0に読み込んだ最後の変数がセットされているかどうか
if ( _root.text2_mc.done == undefined) {

//もし最後の変数が未定義なら,読み込みが完了していない
trace("not yet.");
}

//最後の変数が読み込まれたら
else
{
trace("finished loading. killing interval.");
trace("-------------");

//レベル0に保持した変数をtraceするループ
//i は変数名

for ( i in _root.text2_mc )
{
trace( i + ": "+ _root.text2_mc[i] );
}
trace("-+-+-+-+-+-+-------");
//読み込み完了したので,インターバルはクリアする
clearInterval( param_interval );
}
}

//100ミリ秒ごとに,checkParamsLoadedを呼び出す
var param_interval = setInterval( checkParamsLoaded, 100);

//
//サーバに置くファイル名 testfile.txt
//中身は, var1="hello"&var2="goodbye"&text1="HELLO LITE"&done="done"





■参照
setInterval 関数
loadVariables 関数

loadVariablesNumでサーバからデータを取得



[loadVariablesNum][サーバ通信][ダイナミックテキスト][Flash Lite2.0]

読み込めるファイルは,swfを設置するサーバと同一ドメインであること。
(ドメイン間のデータロードもできるようだが,未調査)

・ダイナミックテキストを用意して,インスタンス名はshow_txt
 ・このshow_txtの変数名はtext1

loadVariablesNumについて
・ムービーのレベルで変数に読み込むことができる
・ムービーには読み込みレベルがあり,0が最小値。最大値は無い。_level0(レベル0)は,読み込むミービー自体のレベル。

Adobeサイトより引用(一部改変):
テキストファイルや、CGI スクリプト、ASP、PHPなどで作成されたテキストなどの外部ファイルからデータを読み取り、Flash Player の特定のレベルの変数に値を設定します。この関数を使用して、現在の SWF ファイルの変数を新しい値で更新することもできます。

指定された URL にあるテキストは、標準の MIME 形式 application/x-www-form-urlencoded (CGI スクリプトで使用される標準形式) である必要があります。変数はいくつでも指定できます。たとえば、次の例では複数の変数が定義されています。

company=Macromedia&address=601+Townsend&city=San+Francisco&zip=94103




//読み込むファイルのURLとファイル名を記述
//読み込むレベルを0に設定

loadVariablesNum("http://・・・・/testfile.txt", 0);

//Adobeのサンプル引用
//loadVariablesNumは読み込み完了を待たないので,
//読み込み完了を検知するfunctionを用意

function checkParamsLoaded() {

//level0に読み込んだ最後の変数がセットされているかどうか

if ( _level0.done == undefined)
{
//もし最後の変数が未定義なら,読み込みが完了していない
trace("not yet.");
}

//最後の変数が読み込まれたら
else
{
trace("finished loading. killing interval.");
trace("-------------");

//レベル0に保持した変数をtraceするループ
//i は変数名

for (i in _level0 )
{
trace( i + ": "+ _level0[i] );
}
trace("-+-+-+-+-+-+-------");
//読み込み完了したので,インターバルはクリアする
clearInterval(param_interval);
}
}

//100ミリ秒ごとに,checkParamsLoadedを呼び出す
var param_interval = setInterval(checkParamsLoaded, 100);

//
//サーバに置くファイル名 testfile.txt
//中身は, var1="hello"&var2="goodbye"&text1="HELLO LITE"&done="done"






もし,ダイナミックテキストの変数を使わないで,インスタンス名を使うなら以下の記述が必要。


//読み込んだデータのtext1の中身を表示する場合
show_txt.text = _level0.text1;


■参考
setInterval 関数
loadVariablesNum 関数

3秒間の連打回数と平均を表示させる



[ボタンイベント][addListener][getTimer][round][Flash Lite2.0]

3秒間の連打回数表示に平均を求めるようにした。

あらかじめ設定された時間(サンプルでは3秒)に,どれだけボタンを連打できるか表示する。
開始は,ボタンを押してスタート。
開始すると,連打回数を表示する。ボタンはwaitと表示
終了すると,「おしまい」と表示し,ボタンFINISHと表示
平均を小数第1位まで表示

$pandyのプログラミングメモ


・以下のソースをムービークリップstart_btnのアクションとして記述




//終わったときの表示は,最初は非表示にする。
onClipEvent(load){
_root.fin_msg._visible = false; //終了メッセージは最初非表示
_root.kai_txt._visible = false; //「回」表示は最初非表示
_root.push_cnt._visible = false; //連打回数は最初非表示
_root.average_label._visible = false;//「平均」表示は最初非表示
_root.average_txt._visible = false;//平均値表示は最初非表示
_root.averagekai_txt._visible = false;//平均の「回」が最初非表示
start_flag = false; //開始ボタンを押されているかどうか。
var push_count:Number = 0; //連打回数保持変数。最初は0
}



//ボタンか「5」が押されたら
on(press, keyPress "5" )
{
if( start_flag == false )
{
var start_time:Number = getTimer(); //開始時の時刻取得
var end_time:Number = start_time + 3 * 1000;//終わりの時刻を計算
var now_time:Number; //計測中の時刻取得
var remain_time_msg:Number; //残り秒数表示
}

start_flag = true; //開始したら開始中のフラグを

//ムービークリップが再生されるたびに呼び出される
this.onEnterFrame = function()
{
now_time= getTimer(); //計測中の時刻

if( now_time > end_time ){ //終了予定時刻を越えたら終了処理
_root.fin_msg._visible = true; //終了メッセージを表示
_root.remain_time.text = "0"; //残り秒数表示を明示的に0に
_root.btn_txt.text = "FINISH"; //ボタンも終わりを示す文字に変更
delete this.onEnterFrame; //イベントハンドラを削除してメモリ解放
start_flag = false;

show_average( push_count, 3 ); //平均表示の関数へ
stop();
}
//予定終了時刻になっていないときの処理
else
{
//残り秒数を整数にする
remain_time_msg = Math.ceil(( end_time - now_time )/1000 );
_root.remain_time.text = remain_time_msg; //残り秒数を表示
_root.btn_txt.text = "2を連打せよ"; //ボタン表示を変える

//これがないと連続実行した際fin_msgが出っぱなし
_root.fin_msg._visible = false;
}
}

//
//平均の計算と表示を行う関数(引数は,押した回数と設定時間)
//
function show_average( pushed_count:Number, past_time:Number )
{
var average_var:Number = pushed_count / past_time;
//roundは,四捨五入して整数にするので,最初に10倍してあとで1/10する。
average_var = Math.round( average_var * 10 );
average_var = average_var / 10;

//平均表示
_root.average_txt.text = average_var;
_root.average_label._visible = true;
_root.average_txt._visible = true;
_root.averagekai_txt._visible = true;
}
}

on( keyPress "2" )
{
if( start_flag == true )
{
_root.push_cnt._visible = true;
_root.kai_txt._visible = true;

push_count++;
_root.push_cnt.text = push_count;
}
}




このサンプルでの要点は,roundするときに,小数第1位であれば,先に10倍しておいてroundし,その後1/10するという点。