- ベストアンサー
onEnterFrameで、条件を満たしたときにその処理から抜けたい。
下のプログラムをフレームに書きました。そうすると、一応は重いどおりにうごいて、_alphaが増えていきphotoとなずけたがムービークリップが見えるという動きはできるのですが、問題は、traceさせてみるとずっと100、100と記述されます。できればこの処理から抜けて、traceで100と出てこないようにしたいです、なにか処理が重たそうなので。フレーム移動して処理抜けるのはできるかもしれませんが、できれば1フレームで終わらしたいなとおもっています。よろしくお願いいたします。バージョンはflashMX2004です。 this.onEnterFrame = function(){ if(photo._alpha >= 100){ photo._alpha = 100; trace(photo._alpha); }else{ photo._alpha += 5; } }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
delete this.onEnterFrame で this.onEnterFrame = function(){} に書かれている内容全部を削除できます。 this.onEnterFrame = function(){ if(photo._alpha >= 100){ photo._alpha = 100; delete this.onEnterFrame }else{ photo._alpha += 5; } }
その他の回答 (1)
- DPE
- ベストアンサー率85% (666/776)
MovieClip クラスや他のクラスでもそうですが、イベントハンドラである on*** は一種の変数のようなもので、最初は undefined (未定義)になっています。 on*** = function・・・で定義すると、この処理を呼び出せるように内部で値が設定され、イベントが発生するたびに指定の処理が実行されるようになります。 onEnterFrame で定義されている関数は、ムービークリップがステージに存在している限り、フレームレート分の1秒ごとに呼び出され続けます。 しかし、もし onEnterFrame の中身が未定義であれば、関数は何も呼び出されないことになります。 ちょっと強引かもしれませんが、条件を満たしたら、onEnterFrame に undefined を代入して、定義されていた関数をクリアする、というのはいかがでしょう。 例えば、アルファが 100 になったら呼び出さないようにするには、 //アルファが100になったら終了 if( photo._alpha >= 100 ) { photo._alpha = 100; //イベントハンドラを未定義に戻し、以降は呼び出さないようにする this.onEnterFrame = undefined; } (↑各行頭に全角のスペースが入っています。コピーして利用する際はご注意ください) こんな感じでいかがでしょうか。
お礼
ありがとうございました。上のかたのでなんとかなりそうです。お手数おかけしました。
お礼
完璧です!ありがとうございました!!。