• 締切済み

ボタンの無効化

いつもお世話になっております。 _rootにおかれたボタンを無効化したいのですがうまくいきません。 これは_rootのフレームに記述しています。 this.pb1.onPress = function() {   trace("test");   this.pb1.enabled = false; }; この書き方になにか問題があるのでしょうか? どうかご指導よろしくお願いいたします。

みんなの回答

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

ボタンやムービークリップでのイベント発生時の処理は、Flash MX からは on や onClipEvent のほかに on*** = function という書き方が用意され、フレームにも設定できるようになりました。 ムービークリップの場合はあまり問題がないのですが、ボタンの場合は、this の指す対象が on アクションと on*** = function の中とでは違いますので、注意が必要です。 ボタンはタイムラインを持っていないため、ActionScript では1つの階層とは見なされません。 on アクションの中で this を使うと、ボタンが存在している階層、つまり親の階層を指します。 例えばステージに存在するボタンに、  on(press)  {   trace( this );  } (↑各行頭に全角のスペースが入っています。コピーする際はご注意ください) を設定し、ボタンをクリックしてみると、”_level0”(通常は _root のことです)と表示されます。 ところが、ボタンに名前を付け、メインのタイムラインのフレームに  this.pb1.onPress = function()  {   trace( this );  }; このように設定してボタンをクリックすると、_level0 ではなく”_level0.pb1”と表示され、ムービークリップと同様に、あたかも1つの階層であるかのように扱われていることが分かります。 つまり、ボタンに対して on*** = function の書き方で指示を出した場合、その中の this はボタン自身を指しているので、this.pb1 では、ボタンの中にある pb1 という対象を指すことになります。 従って、this を使って enabled プロパティを切り替えるスクリプトは  this.pb1.onPress = function()  {   trace( "test" );   this.enabled = false;  }; となります。 しかし、on アクションを使ってボタンに直接設定する時は、this は親のタイムラインを指しますから、  on(press)  {   trace( "test" );   this.pb1.enabled = false;  } このように、pb1 までのターゲットパスが必要になります。

関連するQ&A