Think About it



Home > Blog

20071009

onEnterFrame(1)



onEnterFrameについて。

スクリプトでムービークリップ内に、
onClipEvent(enterframe)と、書くのではなくて、
タイムライン内に、
onEnterFrame = function(){ 内容 }
と、書く方法があります。

これのさらに発展形(?)で、
function XXX (){ 内容 }と、functionで関数を設定し、
それを、OnEnterFrameにする、という方法があります。

例:
function Test(){
test_mc._x ++;
}
this.onEnterFrame = Test;


と、書くと、Test関数がEnterFrameとして繰り返され、test_mcがx方向に1づつ進むこととなります。
こうする利点として、EntterFrame処理がいらなくなったときに、消すことが出来ます。
(たぶん、しなくても消せると思いますが、、)

例:
function Test(){
test_mc._x ++;
}
test_btn.onPress = function(){
this.onEnterFrame = Test;
};
test_btn.onRelease = function(){
this.onEnterFrame = null;
}




こうすると、test_btnを、押したとき(Press)test_mcが動き、
離したとき(Release)EnterFrameにnullが与えられ(要するに、処理を消す)test_mcは止まります。

色々参考サイトを見てみて、この方法があることを知ったのですが、
見た限りでは、
this.onEnterFrame = ~;
と、書いてあります。

では、複数のEnterFrame処理を同時に発生させ、一方だけを消す、という時はどうするのでしょうか?
試してみます。

例:
function Test1(){
test_mc._x ++;
}
function Test2(){
test_mc._y ++;
}
test_btn.onPress = function(){
this.onEnterFrame = Test1;
this.onEnterFrame = Test2;
};
test_btn.onRelease = function(){
this.onEnterFrame = null;
}




結果を見ればお分かりの通り、test_mcはy方向(下)にしか動きません。
そして、ボタンを離すと止まります。
やはり、this.~と同じにしてるのがいけないようです。

なので、次を書いてみます。
例:
function Test1(){
test_mc._x ++;
}
function Test2(){
test_mc._y ++;
}
test_btn.onPress = function(){
onEnterFrame = Test1;
this.onEnterFrame = Test2;
};
test_btn.onRelease = function(){
this.onEnterFrame = null;
}




一つ目から、this.を取り除いてみました。
結果、ボタンを押すと、斜めに(EnterFrameが同時に働いている)、離すと、x方向(横)に動き続けます。

これはどうやら、どれにEnterFrame関数を当てるか、で変わってくるようです。
Test2は、thisに当てていますので、this.onEnterFrame = null;で、処理を取り消すことが出来ます。
しかし、Test1はとくに当てられていませんので、取り消しにはなりません。
違いが出てきました。
(では、何も書かない場合はどこに当てられてるんでしょう、、?)

なので、それぞれの処理をそれぞれ別のムービークリップなりなんなりに割り当ててやれば管理しやすそうです。
そこで、それぞれのためにわざわざ新規にムービークリップを作るのも手間なので、createEmptyMovieClipで、それ用のムービークリップを作ってやる事にします。

例:
_root.createEmptyMovieClip("one",1);
_root.createEmptyMovieClip("two",2);
function Test1(){
test_mc._x ++;
}
function Test2(){
test_mc._y ++;
}
test_btn.onPress = function(){
one.onEnterFrame = Test1;
two.onEnterFrame = Test2;
};
test1_btn.onRelease = function(){
one.onEnterFrame = null;
}
test2_btn.onRelease = function(){
two.onEnterFrame = null;
}




これで、メインのボタンをクリックすると、斜めに動き(同時に働く)、
ボタン1をクリックで、横方向の動きが止まり、
ボタン2をクリックで、縦方向の動きが止まるようになりました。

Labels: ,

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