• 締切済み

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); } } }

みんなの回答

  • 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

専門家に質問してみよう