重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Flash8  Win-XP で作業しています。
SharedObject を利用して計算式をFlashクッキーに「保存」「読み込み」するデータを作っていますが、「ダイナミックテキスト」の「保存」「読み込み」のスクリプトが分かりません。以下の例で教えて下さい。

aaa → テキスト入力 インスタンス名:aaa
bbb → テキスト入力 インスタンス名:bbb
ans → ダイナミックテキスト 変数:ans
btn01

の4つを同じレーヤーに作りました。
計算式は「a-b クリック(btn01) = ans」 としてあります。
フレームスクリプトとして以下を書き込みました。

aaa には、

myLocalSO=SharedObject.getLoval("flashcookie");

if(myLocalSO.data.aaa !=null)
{
aaa.text=myLocalSO.data.aaa;
}
aaa.onChanged=function ()
{
myLocalSO.data.aaa=aaa.text;
};

bbb も同様に、

if(myLocalSO.data.bbb !=null)
{
bbb.text=myLocalSO.data.bbb;
}
bbb.onChanged=function ()
{
myLocalSO.data.bbb=bbb.text;
};

ans01 も同様に、

if(myLocalSO.data.ans01 !=null)
{
ans01.text=myLocalSO.data.ans01;
}
ans01.onChanged=function ()
{
myLocalSO.data.ans01=ans01.text;
};

にしてあります。
次に同一のレイヤーに次のスクリプトを書き込みました。

function hikizan()
{
aaa_num=Number(aaa.text);
bbb_num=Number(bbb.text);
ans01=aaa_num-bbb_num;
}

そして「btn01」には、 

on(release){
hikizan();
}

のスクリプトを書き込んであります。

以上のスクリプト書き込みで、HTML 上で 「500-30=470」 と計算し、HTML を「更新」しても「500」と「30」はクッキーされていて再表示されるのですが、「470」は非表示のままです。
再度「btn01」をクリックすると「470」は計算・表示されますが、この「ダイナミックテキスト」で作成されたデータのクッキー・表示の方法が分かりません。

スクリプトの間違いをご教授頂けましたら嬉しいです。宜しくお願いいたします。

A 回答 (1件)

全体的な感想ですが


スクリプトやインスタンス1つ1つについて
もう少しヘルプを見直された方が良いように思います。


まず
ご質問の最初の方の説明には次のように書いてあります。

> ans → ダイナミックテキスト 変数:ans

しかし
その後の説明やスクリプトにはこの ans が一切出てきません。
ここで「???」状態になります。

またヘルプにも書いてありますが
Flash Player 6 以上用の SWF をパブリッシュするときには
テキストフィールド に 変数名 を付けることは「非推奨」事項になっています。
(ヘルプで「非推奨」と検索。)

ですから
答えを出力するダイナミックテキストの変数名は削除しましょう。
混乱の元になるだけです。
そして
答えを出力するダイナミックテキストには
「ans01」というインスタンス名のみを付けます。

したがってこの時点で関数 hikizan 内の
ans01=aaa_num-bbb_num;
は,
ans01.text = aaa_num - bbb_num;
のように変更する必要があります。


次に,
これもヘルプに書いてあることですが,
TextField クラスの onChanged ハンドラは,
ユーザーの操作によってTextField の値が変更された場合にのみ発動します。
スクリプトで変更されたときには発動しません。
もしこのときに発動するとイベントが無限連鎖する場合もあり得てしまいます。

またスクリプトで変更するタイミングは把握済みで
ボタン「btn01」をクリックしたときに「ans01」を変更するのですから
そのときに保存すれば良いだけです。
わざわざ
『ボタン「btn01」をクリックしたときに変化する「ans01」の変化をonChangedで感知して保存する』
みたいなすごい遠回りなことは考えなくて良いです。


あと...
SharedObject.getLoval("flashcookie");
ではなくて
SharedObject.getLocal("flashcookie");
ですよね。


というわけでフレームのスクリプト書き直し例↓

===========================
myLocalSO = SharedObject.getLocal("flashcookie");

//---aaa---
if (myLocalSO.data.aaa != null)
{
aaa.text = myLocalSO.data.aaa;
}

aaa.onChanged = function()
{
myLocalSO.data.aaa = aaa.text;
};

//---bbb---
if (myLocalSO.data.bbb != null)
{
bbb.text = myLocalSO.data.bbb;
}

bbb.onChanged = function()
{
myLocalSO.data.bbb = bbb.text;
};

//---ans01---
if (myLocalSO.data.ans01 != null)
{
ans01.text = myLocalSO.data.ans01;
}

//---関数hikizanの定義---
function hikizan()
{
aaa_num = Number(aaa.text);
bbb_num = Number(bbb.text);
//↓変更
ans01.text = aaa_num - bbb_num;
//↓ココで保存
myLocalSO.data.ans01 = ans01.text;
}
===========================



結局 SharedObject "以外" の部分に問題があるように思います。
 
「Flash8 SharedObject」の回答画像1

この回答への補足

BlurFiltan 様

遅くなりましたが大変有難うございました。ご指摘のとおり、
> ans01.text = aaa_num - bbb_num;
としてダイナミックテキストを「...text」として処理いたしましたところ、「ans01.text」は「ローカル共有オブジェクト」に保存されたようで、常時表示されます。

ところで今回の制作物は複数ページがあり、それぞれの頁(タイムライン上)に例えば、
ans01.text=aaa_num-bbb_num; //1頁目
ans02.text=ccc_num-ddd_num; //2頁目
ans03.text=eee_num-fff_num; //3頁目
と計算式を設定いたしてあります。

「ans01.text」の部分を「SharedObject」を使用して「ローカル共有オブジェクト」に保存した場合には「ans01.text」がデータとして保存されましたが、「SharedObject」を使用しない場合には、1頁目の計算答え「ans01.text」は一度他のページへ行き、戻ってきたときには消えてしまうため「ans01」を「変数」として処理いたしておりました。
「SharedObject」を使用しない場合の処理は、これでよろしいのでしょうか?
改めて「スラ」を立てないままの質問ですが、ご回答いただけるようでしたら、再度ご教授をお願いいたします。

補足日時:2011/03/07 16:27
    • good
    • 0
この回答へのお礼

大変ご親切な解説で、スクリプトの作り直しがスムースにできました。
有難うございました。
追加質問の表示がわかりませんでしたので、解答欄にコメントを掲載してしまったような気がします。
この質問の仕方でOKでしたら、ご回答頂けましたら幸いです。

改めて御礼申し上げます。

お礼日時:2011/03/08 11:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!