SharedObjectの動作がうまくいかない

このQ&Aのポイント
  • SharedObjectを使用してボタンの状態を保存し、次回アクセス時に反映されるようにしましたが、正常に動作しません。
  • スクリプトの中でSharedObjectを呼び出していますが、初回アクセス時の補正処理が正しく行われていないようです。
  • シェアードオブジェクトからデータを取得し、クリックされた結果をローカルに保存する処理は正常に動作しているようです。
回答を見る
  • ベストアンサー

SharedObjectの動作がうまくいかない。

一度設定したボタンの状態をSharedObjectで保存して、次にアクセスした時に反映されるようにしたのですが、うまく動作しません。スクリプトは下記の通りです。 //ここに現在のロード時の状態を呼び出す onClipEvent (load) { //シェアードオブジェクトの呼び出し mySO = SharedObject.getLocal("topmusic","/"); _root.music = mySO.data.state; //初アクセス時の補正 if (mySO.data.state == null){ mySO = SharedObject.getLocal("topmusic"); mySO.data.state = 1; mySO.flush(); _root.music = 1 } } //クリックされた時にオン・オフを切り替える on (release) { _root.music = _root.music*(-1); //フラグ反転 } //クリックされた結果をローカルに保存する。 mySO = SharedObject.getLocal("topmusic"); mySO.data.state = _root.music; mySO.flush(); } ===================== 以上はメインタイムライン上に配置されたムービークリップ(button)に記述したスクリプトです。 ローカルには新しくファイルが作成されているので、何がしかの処理はされているようです。 もしかして、ローカル保存した

  • Flash
  • 回答数1
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
noname#35109
noname#35109
回答No.1

明らかにパスがずれていますけど… ------------------------------ //ここに現在のロード時の状態を呼び出す onClipEvent (load) { //シェアードオブジェクトの呼び出し mySO = SharedObject.getLocal("topmusic","/"); _root.music = mySO.data.state; //初アクセス時の補正 if (mySO.data.state == null) { mySO = SharedObject.getLocal("topmusic","/"); mySO.data.state = 1; mySO.flush(); _root.music = 1; } } //クリックされた時にオン・オフを切り替える on (release) { _root.music = _root.music*(-1); //フラグ反転 //クリックされた結果をローカルに保存する。 mySO = SharedObject.getLocal("topmusic","/"); mySO.data.state = _root.music; mySO.flush(); } ------------------------------ これでうまく行きました。 SharedObject.getLocal("topmusic","/"); で統一するか SharedObject.getLocal("topmusic"); で統一しないと, 最初に get してくる場所と保存の場所が違います。 また,最後の ------------------------------ //フラグ反転 //クリックされた結果をローカルに保存する。 mySO = SharedObject.getLocal("topmusic","/"); mySO.data.state = _root.music; mySO.flush(); } ------------------------------ はどこに書いてあるのかわかりませんでしたので, on (release) の中に入れました。 solファイルは Windows の場合, C:\Documents and Settings\ユーザ名\Application Data\Macromedia\Flash Player 内のどこかに保存されます。 ローカルPCでしか実験しませんでしたが, "/" があるのとないのとでは,全然違う場所に保存されましたよ。 どこにあるかは PC や,SWFの置き場所によって変わるので, 「topmusic」を検索して探してみてください。

pochitarou
質問者

お礼

おおお!そんなところに原因が・・・。やはり基本がわかっていないとこういうミスをしてしまう物でしょうか。おかげでうまく動作いたしました。 どうもありがとうございます。

関連するQ&A

  • SharedObjectについてです

    1つのwebページに2つflashをはめ込んでいるのですが、その両方に同じSharedObjectを読み込ませたいと考えています。 my_so = SharedObject.getLocal("local","/"); しかし、1つ目のflashは読み込んでも、2つ目のflashが、"undefined"になってしまいます。 なぜでしょうか?何か良い方法がありましたら、ご指導御願いします。

    • ベストアンサー
    • Flash
  • SharedObjectの使い方(長文です)

    制作しているゲームに、セーブ機能を付けようと 下記サイトの、テキストセーブflaや 他のサイトを参考にしましたがうまく作動しません http://mamnag.org/prmx/flash/sharedobject.html 長文で申し訳ないです どなたか分かる方教えてください(_) 環境は、FLASH CS3 アクションスプリクト2.0です ■ゲームのオープニング画面に『スタート』と『ロード』ボタン、 ゲーム内に『セーブ』ボタンを置いて、下記のASを書きました ◆スタートボタン(インスタンス名は、startbtm) on(release){ var so = SharedObject.getLocal("my_data"); if(so){ so.clear(); } nextScene();} //次のシーン(ゲーム内容へ飛ぶ) ◆ロードボタン(インスタンス名は、lordbtm) on(release){ SharedObjLoad(); } ◆セーブボタン(インスタンス名は、savebtm) on(release){ _root.saveData(); } ■フレームアクションスプリクト(1) --------------------------------------------------------- //SharedObjectインスタンスの生成 SO_instance = SharedObject.getLocal("mydata"); //保存用サンプルデータを作成 var arrayData = new Array("aaa","bbb","ccc","ddd","eee"); var stringData= "日本語文字列";//この日本語もUTF8で保存されます。 //データを保存(変数を代入していますが、直接リテラルを入力することも可能です) SO_instance.data.savebtm = arrayData; SO_instance.data.savebtm = stringData; //保存したデータの呼び出し。(出力ウインドウで確認してください) trace("SO_instance.data.savebtm : "+SO_instance.data.savebtm); trace("SO_instance.data.lordbtm : "+SO_instance.data.lordbtm); --------------------------------------------------------- ■フレームアクションスプリクト(2) --------------------------------------------------------- //SharedObjectインスタンスの生成 mySharedObject = SharedObject.getLocal("●●.swf"); //ホストのルートに保存する場合:mySharedObject = SharedObject.getLocal("●●.swf"); //保存したデータの呼び出し _root.lord = mySharedObject.data.lordbtmD; //saveボタンが押されたときにテキストフィールドの変数を保存 function saveData(){ mySharedObject.data.savebtmD = _root.savebtm; } --------------------------------------------------------- サンプルflaに、フレームASが二つあったので そのまま使いましたが、これでいいのでしょうか?? 出力には SO_instance.data.savebtm : 日本語文字列 SO_instance.data.lordbtm : aaa,bbb,ccc,ddd,eee という文字がでました

  • SharedObjectの保存先を指定について

    Flash MXでSharedObjectを利用して、データを保存しようと思います。 Windowプロジェクター(test.exe)をCドライブの直下のtestフォルダに保存し、testフォルダ内にaaa.solを生成させたいと思いますが、別のフォルダに保存されます。testフォルダ内に保存する方法はあるのでしょうか?それともアクションスクリプトが間違っているでしょうか?ご教授ください。よろしくお願いします。 on (release) { myLocalSO = sharedobject.getLocal("aaa","/test"); myLocalSO.data.name = box.text; myLocalSO.flush(); }

    • ベストアンサー
    • Flash
  • duplicateMovieClipしたMCをSharedObjectで保存、読み込みたい

    【やりたいこと】 duplicateMovieClipで何個も複製したムービークリップをSharedObjectで保存し(て読み込み)たい。 【わからないこと】 ユーザーが何個複製するかわからないものをi変数でカウントして それをSharedObjectで保存しようとしているが、 ユーザーが何個複製するかわからないMCに対する 一括命令文?がうまく書けない。 【現状】 まず、MC_printというMCの中にisuというMCがあります。 そのisuの上に空ボタンを置いて、以下のような スクリプトを書きました。 on (press) { _root.MC_print.isu.duplicateMovieClip("isu"+i, i++); //isuというMCをクリックするたびに複製していく _root.MC_print["isu"+i]._x = 500; //重なるので移動させてる } そして、保存ボタンに on (press) { _root.Save_Point(); } と書いていて、 SharedObjectインスタンスの生成は mySharedObject = SharedObject.getLocal("xypoint","/"); としています。 そして肝心のfunction命令文を function Save_Point() { mySharedObject.data["isu"+i._x] = _root.MC_print["isu"+i]._x; mySharedObject.data["isu"+i._y]= _root.MC_print["isu"+i]._y; } としています。 が、動きません。 理由は自分でもなんとなくわかるのですが、 複製されたMCが何個複製されたかわからない。 iの変数がちゃんと共有されてないんじゃないかと思っています。 が、_global変数にしても「isu1」「isu2」という風に インスタンス名を_nameで調べてテキストボックスで確認しても 複製はされてるが、このfunction命令文だとそのインスタンス名毎に (全てに)命令されてないってことですよね・・・。 for文とかを使うんでしょうか。でも何個複製されるか わからないし・・・。よくわかりません・・・。 環境はWindowsXP、FlashMXです。 MX以前の時代から突然またフラッシュを触り始めたので 新しいスクリプトなどはまったくわかりません。 なにかヒントでもいただければ幸いです。どうぞよろしくお願いいたします。

  • 携帯でSharedObject

    auのW53CAを使っています。 SharedObjectで,データを保存しようとするのですが, PC上では成功するものの,携帯では上手くいきません。 コードは至って簡単です。 -------------------------------------------- var d = SharedObject.getLocal("dai"); var obj = d.data; obj.abc = 100; -------------------------------------------- また,携帯はSharedObjectに対応しています。 ご存知の方はご教示願います。

    • ベストアンサー
    • Flash
  • SharedObjectが効かない

    FLASHで、一定時間内にアクセスするとオープニングを飛ばすスクリプ トを書いています。Javascriptのクッキーと同じスクリプトの「SharedObject」を使用しています。 www.hfm-kenchan.com/Lesson/log_qa/D0512073.htm こちらのサイトの解説とサンプルを使用させてもらい、作ってみました が、ページを更新しても1フレーム目からのアニメーションが始まって しまい、スクリプトが効いてません。 現在作っているファイルのアニメーションが25fps、171フレームまであるのが原因だと思いますが。 変数に入っている数字などを変えてみましたが、効きません。 同じサンプルでもレイヤー数がスクリプト用のレイヤーと合わせても3 レイヤー、フレーム数11フレームで作ると効きます。 スクリプトのレイヤーにさらに別のスクリプトを書き加えてやる必要があるのかと思いますが、スクリプト素人である為判りません。 どなたか判る方いらっしゃるでしょうか。お教え下さい。 1フレーム目に入るスクリプトを書いておきます。 span = 15; nowDate = new Date(); nowAC = nowDate.getTime(); cookie = SharedObject.getLocal("accessTime"); if (cookie.data.beforeAC != undefined) { Time = Math.floor((nowAC-cookie.data.beforeAC)/1000); cookie.data.beforeAC = nowAC; if (Time < span) { this.gotoAndStop("menu"); } } else { cookie.data.beforeAC = nowAC; } 使用ソフトはFLASH8、環境はWDXPです。どなたかお助け下さい。

  • SharedObjectに変数を格納したいのですが、、

    最近Flashの勉強を始めたばかりで、この件についてどう調べても分からないので教えていただけませんでしょうか。 SharedObjectに、数値や文字列を保存することはできるのですが、 変数をそのまま保存する方法はありますでしょうか。 XMLからデータを読み込み ⇒ 読み込んだデータをSharedObjectに保存 ⇒ SharedObjectから呼び出して利用 という流れを作りたいと考えています。 具体的には、XMLから読み込んだデータを変数Aに格納して、変数AをSharedObjectに保存しようとしているところがうまく行かず、困っています。。 良い方法がありましたらご教授ください。 どうぞ宜しくお願いいたします。

    • ベストアンサー
    • Flash
  • [ActionScript3.0]ローカルのデータをサーバに同期させる方法

    ローカルで作った値を、オンラインにつないだ時にサーバに同期させるものを作りたいと考えています。 環境は以下のような環境で製作しています。 Flash CS4 ActionScript3.0使用 OS:Windows XP SharedObjectを用いて、ローカルに保存されたSWFで値を保存し、サーバーにあるSWFでローカルで作られたSharedObjectを参照してそれを使うことができないかと考えました。 getLocal( "my_data", "/" ); と指定して実際にためしてみると、ローカルのものと、サーバーでつくられるSharedObjectを別のものになり、同期させることはできませんでした。 他に方法はないかしらべると、getRemote関数なるものがあり、それを用いたものならばできないかと考えやってみましたが、RTMPサーバーを構築していない為、コンパイル時にコネクトできないとエラーを吐かれ使うことができませんでした。 そこでお聞きしたいことは、Flashを用いてローカルに保存されたデータをサーバーでも読み込むことができるのでしょうか? また、もしできるようならばどのような方法を用いればよろしいでしょうか? 宜しくお願いします。

    • ベストアンサー
    • Flash
  • 一つの配列変数をいじると連動して他が代わってしまう理由が知りたいです

    以下の二つの命令 flagSave() と flagLoad() は、ローカル上に _root.flag の値をセーブ、ロードするプログラムです。 _root.flag は配列変数で、 _root.flag.A = "1" _root.flag.B ="全角文字" 等、様々な変数が入ります。 _root.flag の値は、色々変化した後、セーブをしないでロード(昔セーブしたデータに戻す)をする場合があります。 私はこれで動くと思ってプログラムしたのですが・・・ 一度でも flagSave() か flagLoad() を実行すると、 以後 _root.flag の値を変化させると(_root.flag.A="1" 等の命令実行)、それに連動して _root.savedata.data.flag の値も同じように変化するようになってしまいます。 私のやりたい事は、 セーブ&ロードをする時以外は、_root.flag の値だけを変化させ、_root.savedata.data.flag の値は変動させないようにしたいのです。 何方か、以下のプログラムの悪い点等がわかりましたら、是非とも御教授させてはいただけないでしょうか。 よろしくお願い致します。 ------------------------------------------ //================ // フラグのセーブ //================ function flagSave() { _root.savedata = SharedObject.getLocal("TEST"); _root.savedata.clear(); _root.savedata.data.flag = new Array; _root.savedata.data.flag = _root.flag; _root.savedata.flush(); } //================ // フラグのロード //================ function flagLoad() { _root.savedata = SharedObject.getLocal("TEST"); _root.flag = new Array; _root.flag = _root.savedata.data.flag; }

    • ベストアンサー
    • Flash
  • FlashLite2.0 でのSharedObjectについて

    携帯端末のコンテンツに保存機能を付けたいのですが、出来ません。 SharedObjectを使っているのですが、PC上ではOK、携帯NGという 状況です。SharedObjectに対応はしているはずなのですが。。。。 携帯のデータフォルダから起動するFlashアプリです。 機種はauのW43S。Lite2.0には対応しています。 SharedObject自体初めてなので、単純な使い方しかしておらず、 分からないので、リスナーも使用していません。 何が原因かも分からない答えにくい質問ですが、宜しくお願いします。

    • ベストアンサー
    • Flash

専門家に質問してみよう