• ベストアンサー

AS2 文字同士の連結について

左から右へ移動するだけなのですが、関数定義すると文字連結がどうしても上手くいきません。 t1_mcをxが0yが0の位置、サイズは50*50で配置したのですが、 txtMove(1); function txtMove(aaa){ onEnterFrame=function(){ if("t"+aaa+"_mc._x"<700){ var ddd="t"+aaa+"_mc._x"; ddd+=5;} } } 上記で、どうしても動きません。 普通はaaaの横に+をつけてダブルコーテーションで囲むで あってると思うのですが、どのようにすればきちんと繋がりますでしょうか。 よろしくお願いいたします。

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

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

> と書いて使いたかったのですが、最後の1つしか動きません・・・。 > onEnterFrameを3つ呼んでいるはずなのに、どうして・・・。 書かれていらっしゃる onEnterFrame=function(){…}; は, おそらく _root のフレームに書いたものだと思いますから, _root.onEnterFrame=function(){…}; の略した形のものです。 これの原型は MovieClip.onEnterFrame=function(){…}; です。 _root も MovieClip(ムービークリップ)の一種です。 つまり, _root.onEnterFrame=function(){…}; は, 「MovieClip(ムービークリップ)である _root に onEnterFrame イベントハンドラメソッドを定義する」 という意味になります。 1つのムービークリップに対しては, 1つのonEnterFrame イベントハンドラメソッドしか定義できません。 したがって txtMove(1); txtMove(2); txtMove(3); だと, _root に対して3回 onEnterFrame イベントハンドラメソッドを定義することになります。 つまり, txtMove(1); で1回目を定義して txtMove(2); でそれを定義しなおして, txtMove(3); で再度定義しなおしたことになりますから 最後の3回目しか定義されないことになります。 > onEnterFrameを3つ呼んでいるはずなのに、 ですから感覚をまず少し変えた方が良いです。 onEnterFrameを3つ呼んでいるのではなく onEnterFrameを3回定義している(2回定義し直している)という感覚で使う方が良いです。 解決策ですが, 次のようにすれば良いと思います。 txtMove(1); txtMove(2); txtMove(3); function txtMove(aaa) { _root["t"+aaa+"_mc"].onEnterFrame = function() { if (this._x<700) { this._x += 5; } }; } 3つのムービークリップに対して,それぞれ onEnterFrame を定義するということになります。

bhdkgo
質問者

お礼

お返事ありがとうございます。 丁寧に説明していただき、理解できました。 とてもよく分かりました、特に2回定義し直しているという部分が。 助かりました、もっと勉強を続けてみます。 ありがとうございました!

その他の回答 (1)

  • 15mm
  • ベストアンサー率65% (65/100)
回答No.1

if("t"+aaa+"_mc._x"<700) あなたは文字列と数値の比較を行っています。 MCを参照するなら配列アクセス演算子(だったかな?)で指定。 _xはプロパティであって文字列では無いので、 this["t"+aaa+"_mc"]._x のように参照 このままではdddはただの変数になってしまい、_xの操作はできないので、結果的に以下。 txtMove(1); function txtMove(aaa){ onEnterFrame=function(){ if(this["t"+aaa+"_mc"]._x<700){ this["t"+aaa+"_mc"]._x+=5; } } } よく読んでませんのでうまくいかなかったらそう補足お願いします。

bhdkgo
質問者

お礼

お返事ありがとうございました。 もっと基礎から勉強しなおしてみます。

bhdkgo
質問者

補足

お返事ありがとうございます。 悩んでいたので本当に助かりました、勉強している本では簡単な連結しか書いていなかったので、まさかこんな囲い方とは思いませんでした。 ですが、関数定義したのは txtMove(1); txtMove(2); txtMove(3); と書いて使いたかったのですが、最後の1つしか動きません・・・。 onEnterFrameを3つ呼んでいるはずなのに、どうして・・・。 もしご存知でしたらご教授いただけませんでしょうか。

関連するQ&A