【お題】絵本のタイトル

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

A 回答 (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 までのターゲットパスが必要になります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!