スクリプトで移動〜のときに使うかもなクラス。分割のパラドックスを使った移動( _x += (target – _x) / 2 )などのときに使おうかと。
root に定義するもの
/*--------------------------------------------------*//* moveCheckerClass @param checkFunc true だったらその後の動作を終了する @param mainFunc 実行する関数 @param finishFunc checkFunc が true のときに実行する関数*//*--------------------------------------------------*/moveCheckerClass = function ( mainFunc, checkFunc ){ this.checkFunc = checkFunc; this.mainFunc = mainFunc; this.finishFunc = finishFunc; this.isMoving = false;};/*--------------------------------------------------*//* start 動作開始*//*--------------------------------------------------*/moveCheckerClass.prototype.start = function (){ this.isMoving = true;};/*--------------------------------------------------*//* check メインの動作と、終了チェック。 (onEnterFrame などで呼ぶ。)*//*--------------------------------------------------*/moveCheckerClass.prototype.check = function (){ if ( this.isMoving ) { // メインの関数実行 this.mainFunc (); // 終了チェック if ( this.checkFunc() ) { this.isMoving = false; // 終了時に実行 this.finishFunc (); } }};
MovieClip に書くもの。(とりあえずびよーん移動なサンプル)。
onClipEvent ( load ){ this.target = 300; this.v0 = 0; // チェック関数。 true の時終了 this.checkFunc = function () { if ( Math.abs( target - _x ) < 0.25 && Math.abs( v0 ) < 0.25 ) { return true; } return false; }; // メインの関数 ( mc を移動 ) this.mainFunc = function () { var v = (v0 + ( target - _x ) / 10 ) / 1.2 ; _x += v; v0 = v; }; // 終了時の処理 this.finishFunc = function () { _x = target; }; // インスタンスを生成 this.moveChecker = new _root.moveCheckerClass( this.mainFunc, this.checkFunc, this.finishFunc ); // 移動スタート this.moveChecker.start();}onClipEvent ( enterFrame ){ // 移動 & 終了チェック this.moveChecker.check();}
こうすれば、移動が終了した MovieClip は、計算の部分を実行しないので軽くなる・・・のかなぁ(謎。今 flash 作ってるときにこういうルーチンが多くなったのでクラス化してみたその1。flash 5 でも動くはず(flash MX で flash 5 形式 で吐き出せた)。