配列の呼び出し方について制作環境:CS3

このQ&Aのポイント
  • 配列を使って変数を呼び出す方法がわからない
  • 変数を使った配列の呼び出しでundefinedの結果が返ってくる
  • this._parent.mojimc1[3]では問題なく正しい結果が得られる
回答を見る
  • ベストアンサー

配列の呼び出し方について

制作環境:CS3 配列を作成し、変数を使って呼び出そうとするとうまくいきません。 ■親フレーム var mojimc1 = [0,1,2,"文章"]; var moji_txt = ""; ■下のムービークリップ(インスタンス名:mc1)     on (release) {       var nam = _name;       this._parent.moji_txt =this._parent["moji" + nam + "[3]" ];       trace(this._parent.moji_txt);     } とすると、traceの結果が、「undefined」になります。 変数を使わず   this._parent.moji_txt =this._parent.mojimc1[3]; とすると問題無く「文章」となります。 書き方が間違ってるのでしょうか?どなたか、よろしくおねがいします。

noname#177069
noname#177069
  • Flash
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.1

結論から書きますと、 (↓行頭に全角のスペースが入っています。コピーする際は削除してください)  this._parent.moji_txt = this._parent[ "moji" + nam ][ 3 ]; で、いかがでしょう。 ---------------------------------------------------------- 変数・インスタンスを操作する際に使う情報のことを”参照”と言います。 ActionScript では、[ ] を使って文字列で変数やインスタンスなどを指定することができます。これは、[ ] には文字列を参照に変換する機能があるおかげです。 文字列を [ ] で参照に変換する時は、1つの階層を指す文字列につき1組の [ ] を用意します。 配列変数とは、名前が同じで管理番号が違う、”複数の変数”の集まりです。 イメージとしては、mojimc1 というオブジェクトが "0" や "3" といった名前の変数を持っているようなものです。 ですから、ムービークリップが持っている変数などを文字列で指定する時と同じ要領で、  ターゲットパス[ "配列変数の名前" ][ 番号 ] ↑このように、配列変数の名前を表す文字列とインデックス番号の部分を分けて別々に [ ] でくくり、1階層ずつ参照に変換します。

noname#177069
質問者

お礼

無事動作しました! 変数と文字は[]でくくればいいと[]の意味をあまり理解していなかったのでとても参考になりました。 大変、わかりやすい説明ありがとうございました。

関連するQ&A

  • actionscript クラスのメンバ変数のアクセスについて

    やりたいことは、 ムービークリップ(move_mc)をある座標まで、 減算処理をしながら移動するということなんですが、 クラスを勉強中で下記のように書いてみました。 ■インスタンス生成&メソッドへアクセス var move1:Move = new Move(5,100); move1.onclick(); ■asファイル class Move{ var speedPro:Number; var rangePro:Number; function Move(speed:Number,range:Number){ this.speedPro = speed; this.rangePro = range; trace(this.speedPro);//ここの値は5がでます } public function moving(){ _root.move_mc.onEnterFrame = function(){ this._x += (this.rangePro - this._x)/this.speedPro; trace(this._x); trace(rangePro);//undefined trace(this.speedPro);//undefined } } public function onclick(){ _root.move_mc.onRelease = moving; } } speedとrangeでスピードの値と移動範囲の値を引数で渡しています。 コンストラクタ関数のところでtraceするとちゃんと値はわたっていますが、moving関数のところではちゃんと値を取れていないようです。 メンバ変数にちゃんととりにいけていないようなのですが、 どのような書き方をしたらとりにいけるのでしょうか。。。 また、根本的にこのような書き方であっているのでしょうか。。。 ご協力お願いします。

    • ベストアンサー
    • Flash
  • 空の配列を示す方法

    Flash8を使用して、ActionScript2を書いています。 if文を用いて、「変数my_array(配列)が空の配列でない場合は~」 という条件分岐を書きたいのですが、 空の配列を示す方法がわかりません。 var my_array:Array = new Array(); とした上で、 if (my_array == null) { trace("null"); } else { trace("違う"); } と書いて調べてみたのですが、 nullでもundefinedでも""でも[]でも「違う」と表示されてしまいます。 「空の配列でない場合」という条件を書く方法はあるでしょうか?

    • ベストアンサー
    • Flash
  • ActionScript2.0のイベントについて

    親ムービークリップに配置した子ムービークリップのイベントが実行されなくて困っています。 親ムービークリップ自体には下記のイベントを設定しています。親ムービークリップはattachMovieで動的に配置しています。 onRollOver・・・onEnterFrameを設定 onRollOut・・・onEnterFrameを削除 子ムービークリップを配置して子ムービークリックにイベントを設定しました。onEnterFrameをは実行されますが、onReleaseが実行されず困っています。 function Parent() { this.onRollOver = function() { this.onEnterFrame = function(){・・・} } this.onRollOut = function(){ delete this.onEnterFrame; } this["child_mc"].onRelease = function() { trace('a') // 実行されない } this["child_mc"].onEnterFrame = function() { trace('b') // 実行される } } ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ _root.attachMovie("Parent", "parent_mc", _root.getNextHighestDepth(), new Parent()); 子ムービークリップはオーサリングで静的にParentに配置し、プロパティでchild_mcと設定しています。 onReleaseは実行できず、そこで止まっています。 なんでも良いので教えてください。

    • ベストアンサー
    • Flash
  • HTMLレンダリングについて

    お世話になります。FLASH8の質問です。 外部テキストをloadVariablesでムービークリップの中にロードする際に、「HTMLレンダリング」をonにして<font color="#cc0000">したいのですがうまくいきません。 ムービークリップは二つ(インスタンス名:「title_mc」「honbun_mc」)あり、それぞれがダイナミックテキストボックスを持ち、インスタンス名を「title_txt」「honbun_txt」としています。 テキストファイルは"text.txt"で、 内容は title=・・・ &honbun=・・・<font color="#cc0000">・・・</font>・・・ シーン1の1フレーム目に this.loadVariables("text.txt"); this.onData = function() { this.title_mc.title_txt.text = title; this.honbun_mc.honbun_txt.text = honbun; }; プロパティパネルの変数ボックスには何も記入していません。 この方法で出来ると思うのですが・・・うまくいきません。 HTMLレンダリングはムービークリップ内では効かないのでしょうか?それとも何かコツがありますか? よろしくお願いします。

    • ベストアンサー
    • Flash
  • actionscript 2.0 配列型変数をグローバル変数として扱いたい。

    action script2.0で ある変数を、共有しようと、ムービークリップに _global.hoge = _name(ムービーのインスタンス名); というような記述をしました。 すると、たしかにほかのどのムービークリップでも hogeという値は取り出すことができました。 ところが、インスタンスはひとつではなく複数あるため、 _global.hoge = _nameが記述されているムービークリップがいくつもあると、 次々上書きされ、結局hogeは、最後に読み込んだ _nameの値が入ってしまうという現象が起きたのです。 そこで _global.hoge[_name] = _name; というような、変数名がかぶらぬよう配列に変更してみました。 ところが、また問題が発生しました。 なぜか、配列だと頭に_globalとついていても グローバル変数として扱ってくれず、 ほかの場所で hoge[1] 等と記述しても全く値が取り出せないのです。 また、同ムービークリップ内ではちゃんと取り出せました。 どうすれば、配列変数をグローバル変数として 扱うことができるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Flash
  • FLASHでムービークリップ名を変数で持つ場合のloadmovie

    FLASHMXで空ムービークリップを作成して その中に外部SWFを読み込むスクリプトを書いています。 外部ファイルはa0.swfからa10.swfまであるのでそれを全て読み込む為に 空ムービークリップ名を変数で持ちたいのですが loadmvieの行では変数と認識してくれないようで何も表示されません。 (traceの行の2つの変数は正常に表示されますし  直接ムービークリップ名を入れれば読込もできます) おそらく下のソースの例だとpart_mcは変数名なのに そのままムービークリップ名と捕らえられてしまっているようです。 どのようにすれば変数と認識してくれるのでしょう? for (var i = 0; i<10; i++) { var part_mc = "a10" + i + "_mc"; var loadfile = "a" + i + ".swf"; _root.createEmptyMovieClip(part_mc, 100+i); _root.part_mc.loadMovie(loadfile); _root.part_mc._x = i * 10; trace(loadfile); trace(part_mc); } アドバイスをお願いします。

  • ムービークリップ内のボタン

    フラッシュ初心者です。 アクションスクリプトがうまく動かず困っています。 シーン1にムービークリップ1(インスタンス名:mc1)とムービークリップ2(インスタンス名:mc2)が置いてあります。 mc2の中にはボタンAを配置してあり、ボタンAをクリックすると、mc1のフレームラベル(B)に飛ぶような制御をしたいです。 ボタンAに記述してあるスクリプトは以下です。 on (release) { this._parent.mc1.gotoAndplay("B"); } しかしクリックしても全く動きません。 絶対パスで指定してもダメでした。 ちなみに、ためしに、mc1ではなく、シーン1上のフレームラベルに 飛ばすように記述したら普通に動きました。。 何か記述間違いがあるのでしょうか? 分かる方がいましたら教えてください。 お願いします。

  • ボタンを押した時、外部swfを読み込み

    ムービークリップ内のボタン(写真のサムネイル)を押した時、外部.swf(写真やコメントを書いたswf)を読み込もうとしております。 _rootに空のムービークリップを配置し、インスタンス名を load_mcと指定。 _rootに配置したムービークリップの中に配置してあるボタンに on (release) { this._parent.load_mc.loadMovie("comment.swf"); } と書きました。しかしボタンを押してもcomment.swfが表示されません。 解決方法をお教えください。よろしくお願いいたします。

  • 特定できない配列の受け渡し

    いつもお世話になってます。 配列の基礎部分が理解出来ていないので投降させて頂きました。 やりたい事 外部から取得した不特定多数の文字列 (例えばカンマ切りで 0,ab,cde,23e,ss,f,fre など) を配列として格納し、それを個別に呼び出す方法。 具体的に応用したい事 その配列から呼び出したデータを元に myload = new LoadVars(); myload.load("mydomain/配列から抜き出した値.txt"); myload.onData = function(moji) {list = moji;} 等で、テキストデータをそれぞれ読み込み、 テキストインスタンスでそれぞれ表示させる その際上記で言えば変数の myload moji list をそれぞれ変える必要があると思うのですが 具体的にどの様にすれば良いでしょうか? moji++等で良いのでしょうか? 要は取得した文字列から 読み込みファイルへのパスを取得して それぞれ読み込んで、テキストで表示させたい という感じです。 不明な点、補足要求あればお願い致します。

    • ベストアンサー
    • Flash
  • 【AS3.0】外部テキストから配列を読み込む

    fla→PHPに変数・配列のデータを送り、 下記のようなテキストデータを.txtファイルに出力するものを作りました。 var1=1&var2=0&array1=1,2,3&array2=1,2,3,4&array3=1,2,3,4,5 送られた変数・配列はすべて連なっており、&で区切られています。 変数を読み込むには下記で出来るようですが、 参考URL:http://ninotk.oops.jp/weblog/?p=30 private var filePath:String = "topics.txt"; private var tpcLoader:URLLoader; init(); function init(){ tpcLoader = new URLLoader(); tpcLoader.dataFormat = URLLoaderDataFormat.VARIABLES; tpcLoader.addEventListener(Event.COMPLETE,onComplete); tpcLoader.load(new URLRequest(filePath)); } private function onComplete(evt:Event):void{ var src:String = evt.target.data; var vars:URLVariables = new URLVariables(src); contents.topics._date.text = vars.date; contents.topics._txt.text = vars.news; } 配列を読み込む手順がどうしても分かりませんでした... さらに上記のような変数・配列混合での読み込みは可能でしょうか。 もし不可能のようでしたら、変数のみのtxtと配列のみのtxtとで分けての出力も可能です。 よろしくお願い致します。

    • ベストアンサー
    • Flash

専門家に質問してみよう