• 締切済み

for文での配列の書き方で質問です

CS3でゲームを作っています。 レモンが31個あり落ちてくるのをうけとります。 この受け取るときのfor文に以下のように書きました。 lemon_s.lemon0.hana.kajituの0~30までを参照したいのですが 配列のところがわかりません。 _root["lemon_s.lemon"] + i+["hana.kajitu"] というのがたぶん違っていてうまくいかないのだと思いますが 正しい書き方を教えてください。 onClipEvent (enterFrame) { for (i = 0; i < 30; i++) { if (this.in_ok.hitTest (_root["lemon_s.lemon"] + i+["hana.kajitu"])) { _root.point++; trace (_root.point); _root["lemon_s.lemon"] + i+["hana"].gotoAndStop (3); } } }

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

みんなの回答

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

結論から書きますと、hitTest の部分は  this.in_ok.hitTest( _root.lemon_s[ "lemon" + i ].hana.kajitu ) gotoAndStop の部分は  _root.lemon_s[ "lemon" + i ] .hana.gotoAndStop( 3 ); で、いかがでしょう。 ------------------------------------------------------- 変数やインスタンスなどを操作する時は、”参照”という情報を使います。 ActionScript では、配列アクセス演算子 [ ] を使って文字列を参照に変換することができます。 文字列を参照にする場合は1つの階層を指す文字列を1組の [ ] でくくり、複数の階層を変換する時は [ ] でくくったものを並べて記述します。 例えばご提示の例ですと、hana と kajitu は別の階層になっています。これらを参照に変換する時は1つずつ分けて、[ "hana" ][ "kajitu" ] というように書きます。 lemon_s と lemon_数字 も別々の階層ですから、それぞれを別の [ ] でくくって変換します。同じ [ ] の内に記述すると正しく変換されません。 [ ] は、既に参照になっているものと組み合わせて使うこともできます。 参照と組み合わせる時は、ムービークリップが持っている変数やインスタンスなどを指定する時と同様に、[ ] で参照に変換したものとの間に” . ”を入れて記述します。 今回の例ですと、文字列を参照に変換したい部分は”lemon_ + 数字”のムービークリップの部分だけです。 hana や kajitu は既に参照になっているので、あえて変換する必要がありません。 ですから、"lemon_" + 数字の部分だけを [ ] でくくって参照に変換し、最初から参照になっている hana と kajitu の部分は” . ”で直接つなぐことができます。 なお、[ ] を使う時の約束事で、最初の [ ] の左側には必ず参照を指定し、なおかつ [ ] の前に” . ”を付けない決まりになっています。 これは、配列変数を参照する時に  my_array[ 0 ] ↑このように書くのと同じことです。 今回の件では、_root.lemon_s は参照、次の "lemon_" + 数字の部分が文字列( [ ] で参照に変換)、続く hana と kajitu はいずれも参照です。 これと [ ] の文法を合わせて、  _root.lemon_s[ "lemon_" + i ].hana.kajitu となるわけです。 ムービークリップ in_ok と接触した時は hana のフレームを切り替えるのだと思います。この場合も同じ要領で、  _root.lemon_s[ "lemon_" + i ].hana.gotoAndStop( 3 ); となります。 もちろん、lemon_s 以下を全て [ ] で参照に変換しても間違いではありません。 この場合は、1階層分の文字列を1組の [ ] でくくって  _root[ "lemon_s" ][ "lemon" + i ][ "hana" ][ "kajitu" ] です。

Flash-love
質問者

お礼

お礼が遅くなりまして、申し訳ございません。 わかりやすい回答をありがとうございました。 おかげ様でゲームの完成にこぎつけました。 感謝いたします。

関連するQ&A

  • for文の変数の扱いについて

    お世話になります。ムービー1及びムービー2が領域に来たらムービーBを 表示するというアクションスクリプトを作成しています。 領域をryouiki 移動するムービーがmovie1とmovie2 表示されるムービーをmovieB としています。下記のように作成したのですが。 onClipEvent (enterFrame) { for (i=1;i<=2;i++){ moviex="movie" + i; _root.onoff = this.hitTest(_root.[moviex]); _root.movieB._visible = _root.onoff; } } 演算子の後にはフィールド名が必要です。とのエラーメッセージ が表示されます。 _root.onoff = this.hitTest(_root.moviex1) という風に修正すると、無事動くので、変数の扱いがおかしいの だと思うのですが。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • 続ドラッグ&ドロップ

    前に回答頂いたのですが、 お皿に乗った果物の上にさらに置くことができてしまうところを 置けないようにしたいのですが、どのようにしたらいいでしょうか? もう1点なのですが、果物をお皿以外でreleaseしたら、果物の位置を 元の位置に戻にはどうしたらいいでしょうか? たいへん申し訳ないのですがよろしくお願いします。 onClipEvent (load) { // osara の枚数を登録 var o_num = 3; // kudamono の個数を登録 var k_num = 5; } // on (press) { // ドラッグ開始(中央に吸着) startDrag(this, true); // 全ての osara を フレーム2 に進ませる for (var i = 0; i<o_num; i++) { _root["osara"+i].gotoAndStop(2); } // もし,osara が kudamono のどれかとヒットしていれば for (var i = 0; i<o_num; i++) { for (var j = 0; j<k_num; j++) { if (_root["osara"+i].hitTest(_root["kudamono"+j])) { // その osara を フレーム1 へ _root["osara"+i].gotoAndStop(1); } } } } // on (release) { for (var i = 0; i<o_num; i++) { //ドラッグ中のMCの真下にosara? があれば if (_root["osara"+i].hitTest(_root._xmouse, _root._ymouse, true)) { // ドラッグ中のMCを osara? に吸着 this._x = _root["osara"+i]._x; this._y = _root["osara"+i]._y; } } // // 全ての osara を フレーム1 に進ませる for (var i = 0; i<o_num; i++) { _root["osara"+i].gotoAndStop(1); } // ドラッグ終了 stopDrag(); } // onClipEvent (mouseMove) { updateAfterEvent(); }

  • 良いソースの書き方について(複数のインスタンスをまとめてヒットテストする方法)

    ■例文: ---------------------------------------------------------------- onClipEvent (enterFrame) { if ( this.hitTest(_root.char1)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char2)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char3)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char4)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char5)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char6)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char7)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char8)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char9)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char10)) { _parent.nextFrame(); } else if ( this.hitTest(_root.char11)) { _parent.nextFrame(); } } ---------------------------------------------------------------- 上記は、_root.char1 から_root.char11までインタンス名をつけたムービークリップとのヒット確認をするアクションスクリプトです。 こういう動作をしたい場合。 for文を駆使する等で、ソースを短くまとめる方法はありませんでしょうか。 いい案がありましたら、是非ご教授の程宜しくお願い致します。

    • ベストアンサー
    • Flash
  • flash as2.0 hitTest()について

    FLASHMXで作業をしています。 mcが壁に当たると反対方向にmcを移動させたいのですが 以下では、うまくいきません。理由がわかりませんし打開策も わかりません。解決策を教えてください。よろしくお願いいたします。 onClipEvent(load){ this._x=100; this._y=380; } onClipEvent(enterFrame){ this._y -=3; if(_root.tama_mc.hitTest(_root.kabe_mc)==true){ this._y +=5; } }

  • FLASH ロールオーバーでプルダウンメニュー

    FLASHを勉強中3週目です。 アイコンにマウス、(マウスオーバー)を置くと、ロールオーバーでプルダウンメニューが出るようにし、そのメニューからそれぞれのURLにリンクようなサイトを考えています。 下記のChapter11 メニュー・フォーム:11-01 ロールオーバーでプルダウンメニューを表示を参考にしています。 http://book.mycom.co.jp/support/e5/actionscript10/ 画像を作成しするところまでなんとか出来ましたが、スクリプトがわかりません。 上記のサイトでは onClipEvent (load) { this.Stop(); } onClipEvent (enterFrame) { hitTop = this.hitTest(_root._xmouse, _root._ymouse, true); if (hitTop) { this.gotoAndStop("on"); } else { this.gotoAndStop("off"); } } と書かれていますが、urlにリンクをするまでの説明がありません。 初心者用のFLASHのマニュアルを2冊ほど買って勉強していますが、上記のようなスクリプトが載っていないので、WEBで調べながら勉強をしています。 プルダウンメニューのスクリプトで、リンクまでを説明しているサイトがあれば、ご教授ください。 どうぞよろしくお願いします。

  • ActionScriptでの配列について

    var table:Array=["A1","A2"]; と配列を宣言しています。 他のレイヤーでこの配列の値を取得し onClipEvent(load){ for(i=0;i<=_root.table.length;i++){ if(_root.table[i] == "A1"){ //処理1     }else{ //処理2 } というようにその配列の値があれば処理1をなければ処理2をするプログラムを書きたいのですが・・。 rootの配列を読み込むやりかたを教えていただきたいです。 どなたかアドバイスいただけると助かります。

  • 揺れるスクリプトについて

    こちらで教えていただいたサイトで揺れるスクリプト を勉強していたのですが、 ■をMCにして、  onClipEvent (load) {    this._xscale = this._yscale = 0;    function sMove(mScale,acc,conv) {      theScale = theScale*acc+(mScale-this._yscale)*conv;      this._xscale = this._yscale += theScale;    }  }  onClipEvent (enterFrame) {    if (this.hitTest(_root._xmouse,_root._ymouse,1)) {      sMove(130,0.8,0.2);    } else {      sMove(100,0.8,0.2);    }  } と書いたのですがプレビューすると真っ白なままなにも 表示されません。 なぜなのでしょうか?

    • ベストアンサー
    • Flash
  • 1フレーム~5フレームまで表示されなくなったのは。。。

    こんにちわ毎回お世話になっております 新しいフラッシュを作ったのですが 前回のフラッシュにしようしたロード画面を 使いまわしました。 ムービークリップ自体には onClipEvent (load) { _root.stop(); } onClipEvent (enterFrame) { if (100 == Math.floor(_root.getBytesLoaded()/_root.getBytesTotal()*100)) { _root.gotoAndPlay(5); } } onClipEvent (enterFrame) { this.gotoAndStop(Math.floor(_root.getBytesLoaded()/_root.getBytesTotal()*100)); } と前回同様記述しました。 しかし今回はロード画面がでず 白紙の画面のまま読み込みが完了し そのままフレーム5に進んでしまっています。 何回もやりなおしたのですが どうしても白紙のまま読み込んでしまいます。 これはFLA自体が破損?したのでしょうか? 非常に困っています。 なにかアドバイスがありましたらお願いいたします。 別のロードムービーを作ったものの 白紙のまま読み込みされました。。。 FLASH8 WIN XP使用です。

    • ベストアンサー
    • Flash
  • forでonRollOverを一回で書くには?

    下の内容をfor文を使って一回で書くにはどのようにすればよいですか? _root.a0.onRollOver = function(){  trace("0"); } _root.a1.onRollOver = function(){  trace("1"); } _root.a2.onRollOver = function(){  trace("2"); } 下のように書いてみましたが、どのmcにロールオーバーしても "2" と表示されてしまいます。 for(i=0; i<3; i++){  _root["a"+i].onRollOver = function(){   trace(i);  } }

    • ベストアンサー
    • Flash
  • 下からスライドしてくるメッセージ

    こんにちは。 フラッシュ初心者です。画面下に、タブを出しておいてマウスオーバーすると上にスライドしてメッセージが出るというものを作っているんですが、位置の指定がうまくいきません。 もともと横にスライドするサンプルを見つけまして、縦に動くようにカスタマイズしているのですが…。 最初の位置の指定はできました。動きも縦になったのですが上に行き過ぎてしまうのです…。 メッセージ枠の幅だけ上に上がるようにするか、または上から○pxのところまで上がるように指定したいのですが、この場合どうすればよいのでしょうか? ↓今、こんな感じで作ってます。ステージはw400px×H200pxです。 onClipEvent (load) { this._y = 180; } onClipEvent (enterFrame) { if (this.hitTest(_root._xmouse,_root._ymouse,1)) { this._y -= (this._height-this._y)/_root.speed; } else { this._y += (180-this._y)/_root.speed; } }

    • ベストアンサー
    • Flash