• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:this.nの記述について)

ムービクリップのロールオーバによるalphaの動作が正常に行われない理由は何ですか?

このQ&Aのポイント
  • ムービクリップのa1,a2,a3,a4をロールオーバするとそれぞれ対応する数字のh1,h2,h3,h4のムービクリップのalphaが0から100にtweenを使って動かすことを考えたいと思います。
  • このプログラムは、ムービクリップの初期設定を行い、それぞれのボタンのonRollOverイベントに対応するtweenを作成しています。
  • しかし、このプログラムは正常に動作しません。原因として考えられるのは、ボタンのonRollOverイベントが正しく設定されていないことです。

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

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

ご提示のスクリプトですと、h1 ~ h4 にロールオーバーした時に a1 ~ a4 が変化するようになっていると思われますが、どちらなのでしょうか? とりあえず、ご質問文通り a1 ~ a4 にロールオーバーした時に h1 ~ h4 を Tween クラスで変化させる作例を考えます。 Tween クラスのコンストラクタ( new Tween )に渡す1番目のパラメータは、トゥイーンの対象になるオブジェクトの”参照”です。 ご提示のスクリプトでは、これがただの文字列になっているため、トゥイーンを作成する対象が正確に設定されていません。 この点を修正してスクリプトにしてみますと、大体、次のようになります。 ステージに a1 ~ a4 と h1 ~ h4 があり、a○のムービークリップにロールオーバーした時、h○のムービークリップを Tween クラスで操作するものとします。 このスクリプトは、メインのタイムラインのフレームに設定してください。 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください)  import mx.transitions.*;  import mx.transitions.easing.*;  ////////////////////////////////////////////////////////////  //a1~a4の初期設定  ////////////////////////////////////////////////////////////  for( i = 1 ; i <= 4 ; i++ )  {   //ロールオーバー時に操作するムービークリップを記録しておく   this[ "a" + i ].clip = this[ "h" + i ];   //ロールオーバー時の処理   this[ "a" + i ].onRollOver = function()   {    var tween_handler;    //Tweenオブジェクトを作成    tween_handler = new Tween( this.clip , "_alpha" , Strong.easeOut , 0 , 100 , 1 , true );   };  }  ////////////////////////////////////////////////////////////  //h1~h4の初期設定  ////////////////////////////////////////////////////////////  for( i = 1 ; i <= 4 ; i++ )  {   //最初は透明にしておく   this[ "h" + i ]._alpha = 0;  } **************************** ムービークリップのインスタンス名を共通の名前+通し番号で付け、この通し番号をムービークリップごとに変数に保存しておいて何かに利用する手法は、ActionScript ではよく使われます。 今回は Tween クラスには対応する番号の”ムービークリップの参照”を渡さなければならないため、番号を保存した場合は、これを利用して対象のムービークリップの名前(を表す文字列)を作り、参照に変換して渡さなければなりません。 文字列を参照に変換するには eval 関数か [ ] 演算子を使いますが、eval 関数を使う方法は旧式です。 上記のスクリプトの this[ "a" + i ] や this[ "h" + i ] が、文字列を参照に変換している部分です。 [ ] 演算子で参照に変換する方法には様々な書き方がありますが、this を使う場合は this が指す対象に注意しましょう。 フレームに書いたスクリプトでの this は、そのタイムラインの階層を指します。 しかし、onRollOver などのイベントハンドラに登録される関数の中での this は、イベントハンドラの持ち主を指すように変わってしまいます。 各ムービークリップに設定した管理番号を利用し、更に this を使った相対表現でターゲットパスを書くと、new Tween の第1パラメータは  tween_handler = new Tween( this._parent[ "h" + this.n ] , … ); このようになります。 番号を変数に記録しておき、onRollOver = function の中で番号から対象のムービークリップの参照を作るとなると、this の指す対象の変化でこの通りターゲットパスが複雑になります。 先の作例では、ただの番号ではなく、自分に対応するムービークリップの参照を変数に記録しています。 あとは、この変数を間違いなく new Tween に渡すだけです。 [ ] 演算子で変換すると this や _parent がたくさん付いてターゲットパスがややこしくなりそうな場合は、最初から、操作したいムービークリップの参照を記録しておく方法がオススメです。

kolbejp
質問者

お礼

 ありがとうございました。質問の後、rootから指定すると作動したので、対応するクリップがわからないのだろうとは思っていましたが、なるほどこれはスマートです。色々応用できそうです。今後ともよろしくお願い申し上げます。

関連するQ&A

専門家に質問してみよう