あなたは何にトキメキますか?

お世話になります。

幅500pxのステージに形だけのムービークリップを作り、
それに
onClipEvent (enterFrame) {
if (this._x<=100) {
this._x = 250;
} else {
this._x = 300;
}
}
と記述しました。
ステージ上でムービークリップのx位置を100px以下に配置したところ、300pxに移動してしまいます。
onClipEvent (load)に変更すると250pxになります。
なぜですか?

よろしくお願いします。

A 回答 (1件)

ActionScript は、ある出来事(イベント)が発生した時にスクリプトが実行される仕組みになっています。


onClipEvent に続く ( ) の中に書く load や enterFrame などは、何のイベントが発生した時にスクリプトを実行させるかの指定です。


load イベントは、基本的には、ムービークリップがステージに登場した時に1度だけ発生します。
つまり、onClipEvent(load) で書いたスクリプトが実行されるのも、ムービークリップが登場した時”1度だけ”ということになります。

一方 enterFrame イベントは、ムービークリップがステージに存在している間、フレームレート分の1秒ごとに常に発生しています。
従って、onClipEvent(enterFrame) で書いたスクリプトはフレームレート分の1秒ごとに”繰り返し”実行されます。

----------------------------------------------------------------

ムービークリップを X = 100 px 以下の位置に配置した場合、onClipEvent(load) の中にご質問文にある通りのスクリプトを書きますと、ムービークリップがステージに登場した時は、if 文の条件である「 this._x が 100 以下」の条件が成立します。
ですから、if に続く { } 内に書かれている命令に従って this._x の値が 250 に書き換えられ、結果としてムービークリップが X = 250 の位置に移動します。

load イベントを使ったスクリプトはムービークリップがステージに登場した時に1度しか発生しませんから、以降はスクリプトが実行されません。
つまり、load イベントを使った場合は、ムービークリップが X = 250 の位置に1度移動するだけで終了、ということになります。

**************************

load から enterFrame に変更すると、ムービークリップがステージに存在している間、フレームレート分の1秒ごとに繰り返しスクリプトが実行されるようになります。

ムービークリップを X = 100 px 以下の場所に配置したのなら、最初に実行されるスクリプトで if 文の条件が成立し、X = 250 の位置に移動します。
ここまでは load イベントの時と同じです。

enterFrame イベントを使うと、その後もたびたびスクリプトが実行されるのです。
2回目では this._x の値は 250 になっていますから、if 文の条件が不成立となり、else に続く処理が行われるようになります。
else 内で行われているのは this._x の値を 300 に書き換えることなので、この時にムービークリップは X = 300 の位置に移動します。

3回目ですと this._x は 300 になっているため、やはり if 文の条件は不成立で else に書いた方の処理が実行されます。
4回目以降はずっと、これの繰り返しです。
ですから、最終的なムービークリップの位置は X = 300 になるというわけです。
    • good
    • 0
この回答へのお礼

なるほど~!
とてもよくわかりました。
合わせてloadとenterFrameの使い方も!
どうもありがとうございました(^^)

お礼日時:2007/03/30 13:31

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


おすすめ情報