2011-06-20 9 views
0

私は、いくつかのトゥイーンが適用されたmcを持っていますが、完了する前にロールアウトすると、ブレークします。トゥイーンの実行中にボタンを無効にしたくないのは、実行中にロールアウトしても何も起きず、そのフレームに詰まってしまうためにユーザーを混乱させるからです。AS2:モーションが完了するまでロールアウトを実行しない

私が望むのは、トゥイーン(またはその後)の間に展開を確認す​​ることですが、トゥイーンが完了するまで実行されません。ロールアウト機能からロールオーバー機能でトゥイーンのonmotionfinishedにアクセスすることはできません。

アイデア?

それはここに役立ちます場合は、私のロールオーバーです:

buttons[i].onRollOver = function() { 
    var oppX:Number = Stage.width-this._x; 
    var oppY:Number = Stage.height-this._y; 
    if (oppX-209.8<=20) { 
     var difference:Number = Math.abs(20-(oppX-209.8)); 
     oppX += difference; 
    } else if (oppX+209.8>=780) { 
     var difference:Number = Math.abs(780-(oppX+209.8)); 
     oppX -= difference; 
    } 
    if (oppY-172.1<=20) { 
     var difference:Number = Math.abs(20-(oppY-172.1)); 
     oppY += difference; 
    } else if (oppY+172.1>=580) { 
     var difference:Number = Math.abs(580-(oppY+172.1)); 
     oppY -= difference; 
    } 
    var TweenX:Tween = new Tween(circle, "_x", mx.transitions.easing.Strong.easeOut, circle._x, oppX, 1, true); 
    var TweenY:Tween = new Tween(circle, "_y", mx.transitions.easing.Strong.easeOut, circle._y, oppY, 1, true); 
    circle.gotoAndPlay("out"); 
    myColor = new Color(this); 
    myColor.setTint(153,255,0,30); 
    for (MovieClip in buttons) { 
     delete buttons[MovieClip].onEnterFrame; 
     if (buttons[MovieClip] != this) { 
      buttons[MovieClip].enabled = false; 
      myColor = new Color(buttons[MovieClip]); 
      myColor.setTint(255,255,255,80); 
      myColor = new Color(buttons[MovieClip]._line); 
      myColor.setTint(255,255,255,80); 
     } 
    } 

}; 

と私のrollOutが:

buttons[i].onRollOut = function() { 
    this.onMotionComplete = function() { 

    var TweenX:Tween = new Tween(circle, "_x", mx.transitions.easing.Strong.easeOut, circle._x, 400, 0.5, true); 
    var TweenY:Tween = new Tween(circle, "_y", mx.transitions.easing.Strong.easeOut, circle._y, 300, 0.5, true); 
    TweenY.onMotionFinished = function() { 
     for (MovieClip in buttons) { 
      buttons[MovieClip].enabled = true; 
     } 
    }; 
    this._parent.circle.gotoAndPlay("in"); 
    for (MovieClip in buttons) { 
     buttons[MovieClip].onEnterFrame = function() { 
      moveButtons(this); 
      controlButtons(this); 
     }; 
     myColor = new Color(buttons[MovieClip]); 
     myColor.setTint(255,255,255,0); 
    } 

}; 
+0

'_currentframe'と' _totalframes'はあなたの良い友人です。 – JiminP

+0

それは私が恐れているアクションスクリプトのトゥイーンです。シングルフレーム。 –

+0

enterFrameを使用してオブジェクトを手動でトゥイーンしたり、トゥイーンライブラリを使用していますか?トゥイーンライブラリの場合は、アニメーションを完了するためのイベントハンドラ/コールバックが必要です。 onEnterFrameをアニメーション化する場合、オブジェクトの現在の位置が最終位置であるかどうかを確認できます。 –

答えて

0

は、それはので、私それがのgotoAndPlayたことを問題のほとんどを引き起こしてトゥイーンではなかったことを実現私の止めを持っていた。そのムービークリップ上のマーカーと同じフレームで呼び出され、それらが詰まってしまいます。

トゥイーンに問題がありました(トゥイーンがミッドトゥイーンと呼ばれていた場合、ロールオーバー位置がロールオーバー位置に戻っていました)が、トゥイーンをグローバルにアクセス可能にする配列にプッシュすることに決め、展開時にonmotionfinished配列に何かが含まれているかどうかを確認し、そうであれば最初に古いトゥイーンを削除します。

最終製品:

buttons[i].onRollOver = function() { 
    circle.active = this; 
    var oppX:Number = Stage.width-this._x; 
    var oppY:Number = Stage.height-this._y; 
    if (oppX-209.8<=20) { 
     var difference:Number = Math.abs(20-(oppX-209.8)); 
     oppX += difference; 
    } else if (oppX+209.8>=780) { 
     var difference:Number = Math.abs(780-(oppX+209.8)); 
     oppX -= difference; 
    } 
    if (oppY-172.1<=20) { 
     var difference:Number = Math.abs(20-(oppY-172.1)); 
     oppY += difference; 
    } else if (oppY+172.1>=580) { 
     var difference:Number = Math.abs(580-(oppY+172.1)); 
     oppY -= difference; 
    } 
    var TweenX:Tween = new Tween(circle, "_x", mx.transitions.easing.Strong.easeOut, circle._x, oppX, 1, true); 
    var TweenY:Tween = new Tween(circle, "_y", mx.transitions.easing.Strong.easeOut, circle._y, oppY, 1, true); 
    TweenY.onMotionFinished = function() { 
     tweens.length = 0; 
    } 
    tweens.push(TweenX,TweenY); 
    circle.gotoAndPlay("out"); 
    myColor = new Color(this); 
    myColor.setTint(153,255,0,30); 
    for (MovieClip in buttons) { 
     delete buttons[MovieClip].onEnterFrame; 
     if (buttons[MovieClip] != this) { 
      buttons[MovieClip].enabled = false; 
      myColor = new Color(buttons[MovieClip]); 
      myColor.setTint(255,255,255,80); 
      myColor = new Color(buttons[MovieClip]._line); 
      myColor.setTint(255,255,255,80); 
     } 
    } 
}; 
buttons[i].onRollOut = function() { 
    if (tweens.length != 0) { 
     tweens[0].stop(); 
     tweens[1].stop(); 
     delete tweens[0]; 
     delete tweens[1]; 
     tweens.length = 0; 
    } 
    circle.gotoAndPlay("in"); 
    var TweenX:Tween = new Tween(circle, "_x", mx.transitions.easing.Strong.easeOut, circle._x, 400, 0.5, true); 
    var TweenY:Tween = new Tween(circle, "_y", mx.transitions.easing.Strong.easeOut, circle._y, 300, 0.5, true); 
    TweenY.onMotionFinished = function() { 
     circle._x = 400; 
     circle._y = 300; 
     for (MovieClip in buttons) { 
      buttons[MovieClip].enabled = true; 
     } 
    }; 
    for (MovieClip in buttons) { 
     buttons[MovieClip].onEnterFrame = function() { 
      moveButtons(this); 
      controlButtons(this); 
     }; 
     myColor = new Color(buttons[MovieClip]); 
     myColor.setTint(255,255,255,0); 
    } 
}; 
関連する問題