- ベストアンサー
Flash8 SharedObjectを利用した計算式の保存と読み込み方法
- Flash8でSharedObjectを利用して計算式を保存・読み込みする方法を教えてください。
- 計算式の保存・読み込みには、ダイナミックテキストとボタンのスクリプトを組み合わせます。
- スクリプトに誤りがある可能性があります。正しく計算結果を表示するためには、正しいスクリプトを使用する必要があります。
- みんなの回答 (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 "以外" の部分に問題があるように思います。
お礼
大変ご親切な解説で、スクリプトの作り直しがスムースにできました。 有難うございました。 追加質問の表示がわかりませんでしたので、解答欄にコメントを掲載してしまったような気がします。 この質問の仕方でOKでしたら、ご回答頂けましたら幸いです。 改めて御礼申し上げます。
補足
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」を使用しない場合の処理は、これでよろしいのでしょうか? 改めて「スラ」を立てないままの質問ですが、ご回答いただけるようでしたら、再度ご教授をお願いいたします。