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: ActionScript, on
<< Home