2011-06-20 89 views
0

我有一個應用了一些補間的mc,但是如果您在完成之前展開它們,就會中斷。我不希望在補間運行時禁用按鈕,因爲如果您在運行補間時運行,則會讓用戶感到困惑,因爲沒有任何反應,並且您會陷入困境。AS2:直到動作完成纔會執行展開

我想要的是在補間(或之後)確認鋪開,但不補充,直到補間完成。但是,我似乎無法從卷展欄功能訪問輪轉函數中的補間動畫已完成。

任何想法?

如果它幫助這裏是我的側翻:

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); 
     } 
    } 

}; 

和我的部署:

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我吐溫有我的停止();調用與該動畫片段上的標記相同的幀,導致它們卡住。

補間有一些問題(如果其補間被稱爲補間中間位置,則補間跳轉回翻轉位置),但我決定將補間推送到一個數組,使其可以全局訪問並清除數組onmotion已完成,然後在部署檢查數組是否包含任何內容,如果是這樣,先殺掉舊的補間。

終產物:

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); 
    } 
}; 
相關問題