- 締切済み
ボタンの無効化
いつもお世話になっております。 _rootにおかれたボタンを無効化したいのですがうまくいきません。 これは_rootのフレームに記述しています。 this.pb1.onPress = function() { trace("test"); this.pb1.enabled = false; }; この書き方になにか問題があるのでしょうか? どうかご指導よろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- DPE
- ベストアンサー率85% (666/776)
ボタンやムービークリップでのイベント発生時の処理は、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 までのターゲットパスが必要になります。