• 締切済み

SharedObject.getLocal()、オブジェクト名.data.変数の「変数」の部分に変数を入れる方法について

SharedObject.getLocal()、オブジェクト名.data.変数の「変数」の部分に変数を入れる方法について ActionScript初心者なので頓珍漢な事を書いているかもしれませんが、 よろしくお願いします。 オブジェクト名.data.変数の変数の部分に変数を入れたく、 AS2.0で //////////////////////////////////////////////// my_hozon = SharedObject.getLocal("test", "/"); count = 0; for (count=0; count<=3; count++) { abc = "test_"+count; trace(abc); my_hozon.data.abc= "a"; trace(my_hozon.data.abc);//結果"a" trace(my_hozon.data.test_0);//結果"undefined" trace(my_hozon.data.test_1);//結果"undefined" trace(my_hozon.data.test_2);//結果"undefined" trace(my_hozon.data.test_3);//結果"undefined" } //////////////////////////////////////////////// と書いてみたのですが、 trace(my_hozon.data.abc); は結果が返ってきたのですが、 trace(my_hozon.data.test_0); trace(my_hozon.data.test_1); trace(my_hozon.data.test_2); trace(my_hozon.data.test_3); だとundefinedになり失敗しました。 どうすれば変数に変数が入るのか教えていただけないでしょうか。 よろしくお願いします。

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

みんなの回答

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

SharedObject以前に何がしたいのかがわかりませんよ...。 SharedObject も for文 も抜きにして 簡単なもので実験などしてみるのが良いと思います。 例えば _root に 「test_1」 という変数のみ を書いたとします。 そしてその「test_1」を trace したとします↓。 --------------------------- test_1; trace(test_1); // →結果 undefined --------------------------- ↑「test_1」の 値 など定義していないので, test_1 は当然 undefined になります。 スクリプトを私とFlashとの日本語会話にします↓。  私:「test_1 があります。」  私:「さて test_1 は何ですか?」    //→Flash:「は? 何ですかって知りません。未定義です。」 というやりとりになります。 test_1 を undefined にしたくなければ, というか, 変数だけ置いても意味が無いので,変数を意味のあるものにしたければ 次のように値を入れるべきでしょう。 --------------------------- test_1 = "あいうえお"; trace(test_1); // →結果 あいうえお --------------------------- スクリプトを日本語会話にします↓。  私:「test_1 は "あいうえお" です。」  私:「さて test_1 は何ですか?」    //→Flash:「"あいうえお" です!」 というやりとりになります。 少なくともこの辺の理解が必要だと思います。 というわけで, いったい何がしたいのでしょうか? SharedObject や for文 の前に何がしたいのかをハッキリさせないと, Flashは言うことを聞きません。 雰囲気や感じから何をしたいのかを理解できる人間ですらわからないのですから Flash にわかるはずがありません。 一応, こうすれば↓少なくとも undefined ではないものが出力されますが。 --------------------------------------- my_hozon = SharedObject.getLocal("test", "/"); for (count=0; count<=3; count++) { my_hozon.data["test_"+count] = count; } trace(my_hozon.data.test_0);//結果 0 trace(my_hozon.data.test_1);//結果 1 trace(my_hozon.data.test_2);//結果 2 trace(my_hozon.data.test_3);//結果 3 --------------------------------------- 回りくどいですが, わざわざ 変数 abc を介す場合は, 次のようにしても,少なくとも undefined ではないものが出力されます。 --------------------------------------- my_hozon = SharedObject.getLocal("test", "/"); for (count=0; count<=3; count++) { abc = "test_"+count; my_hozon.data[abc] = count; } trace(my_hozon.data.test_0);//結果 0 trace(my_hozon.data.test_1);//結果 1 trace(my_hozon.data.test_2);//結果 2 trace(my_hozon.data.test_3);//結果 3 --------------------------------------- しかし,これは私が勝手に作ったスクリプト例です。 実際には何がしたいのかわからないので 書けることはこのぐらいです。 それと,SharedObject ではなく, 書かれていらっしゃる for文 の使い方がそもそも変ですよ。 「for文」 をネット検索やヘルプ検索で調べて理解して使えるようになることが先のような気がします。 また, その 「for文」 と合わせて良く使用されるのが上のスクリプトにもある, 「[ ]」=「配列アクセス演算子」 です。 「配列アクセス演算子」 についてもGoogle検索やヘルプ検索などしてみて 理解して使えるようにするのが良いと思います。 結論:問題点は SharedObject の使い方にあるのでは "ない" と思います。  

hikarin0
質問者

お礼

わかりやすい回答ありがとうございます。 for文は本で調べたり周りに聞いたりして一応理解していたつもりだったのですが… もう一度調べ直してみます! 配列アクセス演算子は知らなかったので調べてみます! ありがとうございました。

関連するQ&A

  • 変数名に変数を使う

    Flash8を使用し、ActionScript2で書いています。 変数名に、他の変数の値を参照したいと考えています。 http://www.flash-jp.com/modules/newbb/viewtopic.php?topic_id=6679&forum=6 を見て、同じようにやってみました。 すると、 animal = "cat"; catlLegs = 4; とした場合、animalの値であるcatを参照し animalLegs = 4; とする、というような単純なものはうまくいきました。 しかし、SharedObjectのdataプロパティで、属性名を変数にしようとすると うまくいきません。 dataNameという変数に、soというSharedObjectのneko属性の値を代入する場合、 so:SharedObject = SharedObject.getLocal("hoge"); animal = "neko"; dataName = _root["so.data."+animal]; としたのですが、 trace(dataName); の値はundefinedになってしまいます。 なお、 trace(_root.so.data.neko); では正しく値が表示されます。 属性名前には他の変数の値を参照できないのでしょうか。 それともSharedObjectではできないのでしょうか。 なんとか実現する方法をおしえていただければと思います。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • SharedObjectについてです

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

    • ベストアンサー
    • Flash
  • ローカル共有オブジェクトの使い方

    ActionScript2.0でウェブを開発中です。 a.swfで保存したローカル共有オブジェクトをb.swfで読み込もうとして うまくいきません。 以下のb.swfのコードを参照してください。 //ローカル共有オブジェクト 取得 my_so = SharedObject.getLocal("so1") ; trace("my_so.data.date=" + my_so.data.date) ; a.swfでは、"so1"という名前でローカル共有オブジェクトを生成して flush()しています。 a.swfでは読めるのですが、b.swfでは読み込むことができません。 もともとの仕様なんでしょうか?

    • ベストアンサー
    • Flash
  • オブジェクトを格納するためのローカル変数のデータ型について

    ずっとCOBOLユーザで、初めてJAVAを勉強しています。 初歩的なところで、早くも躓いています・・・。 オブジェクトを格納する為のローカル変数の「データ型」について、 私が使用している本に「格納するオブジェクトのクラスがデータ型と なります。」と書かれていますが、ピンと来ません。 クラス名がデータ型になるって、どういうことなんでしょう? どなたか、こんな私に判るように説明していただけませんか? よろしくお願いします。

    • ベストアンサー
    • Java
  • インスタンス名の指定に変数を使いたい

    ある一つのボタンオブジェクトで、マウスイベントによって別のムービーをコントロールしたいのですが、 同じボタンでも時々の状況によってコントロールする対象となるムービーが違うのです。 そこで、状況1では変数Aにムービー1のインスタンス名を、状況2では同じ変数Aにムービー2のインスタンス名を代入し、ボタンオブジェクトのスクリプトの中で変数Aの値をコントロール対象となるムービーのインスタンス名として使って、結果的に状況次第で操作対象を変える、ということは出来ないのでしょうか? traceアクションで見ていると変数の値は正しく変化しているのですが、ムービーのコントロールはまったくできず、困っております。 ボタンには、変数Aがnameだとすると、 on (rollOver) {   trace(name);   _root.name.gotoAndStop(2); という記述をしております。 解決策をご存知の方、どうかご回答よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • VB6にて文字型変数の内容をオブジェクト変数に代入する方法

    VB初心者ですが オブジェクト変数に文字型変数で作成した オブジェクト名を代入したいのですが 上手くいきません。 Dim anyCmb As ComboBox Dim cmb_name As String cmb_name = "ABC" Set anyCmb = cmb_name 誰かわかる方がいましたら、教えてください。 よろしくお願いします。

  • PHPでFORMから来る変数名を変数にするには

    PHPでFORMから来る変数名を変数にするにはどうしたらよろしいでしょうか? 可変変数など調べたのですが、値を変数にすることは出来ても変数名を変数にする事は難しいようです。 <form action="reg.php"> <input type = "text" name = "comment"> <input type = "submit"> </form> このform内のnameが動的に変わるプログラムで,reg.phpにおいて名前(今ならcomment)を変数に格納したいと思っています。 reg.php 本来なら $comment = _REQUEST['comment']; とすると思うのですが、commentが動的に変動する場合、_REQUEST内をどう書き換えれば良いかが分からず困っています $dynamic_name = _REQUEST['ここをどう書けばよいでしょうか'] このことを考えてから今はform内ですが、formでなくてもどうやって書いてよいか分からず疑問に思いました 例えば $test = 'abc'; としたとき $test_name にtestという文字列を入れたい場合(つまりabcの変数名)どうやって入れたらよいのでしょうか?(もちろんtestと言う名前は動的に変わります) 詳しい方いらっしゃいましたらご回答いただければと思います。 良いアドバイスございましたら教えてください よろしくお願いします

    • 締切済み
    • PHP
  • 携帯でSharedObject

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

    • ベストアンサー
    • 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 という文字がでました

  • 文字列を変数名として扱う方法

    vb6.0 か vb.net で文字列を変数名として扱うにはどうすればいいでしょうか? 例をあげると下記のようなことです。 -------------------- dim abc as string dim x as string abc = "テスト" x = "b" msgbox "a" & x & "c" -------------------- これをそのままvb6.0で実行すると"abc"という文字が表示されますが "abc"ではなく"テスト"と表示させたいのです。 つまり msgbox abc とした場合と同じようにしたいのですが可能でしょうか? ご存知の方教えてください。 よろしくお願いします。

専門家に質問してみよう