我一直在摸索這個問題。我有一個可愛的小工具提示動畫片段,它會在用戶的鼠標移除之前持續幾秒鐘。我的問題是,如果已經有一個我刪除它,但是,我似乎無法刪除MOTION_FINISH事件,它仍然會觸發並可能刪除新的工具提示。AS3通過動畫剪輯在MOTION_FINISH之前移除補間
我想要的是本質上放入一個行項目,如var tween(smallhelp_panel).deleteAll();我看到一個tweenlight函數killtweensof(mc);但是我已經使用了我在下面整個30k行AS3代碼中使用的補間。
這是我的工具提示處理程序。我用一個簡單的叫它
Main_Warning("Please don't forget to save!",5);
我的movieclip是一個'smallhelp_panel',我檢查它是否已經存在並將其刪除。但是,alpha和MOTION_FINISH補間仍然存在,並會導致任何新的smallhelp_panel出現問題。
public function Main_Warning(the_text:String, myTimer:int = 4){
if(smallhelp_panel != null){
stage.removeChild(smallhelp_panel);
removeEventListener(Event.ENTER_FRAME, trackmouse);
smallhelp_panel = null;
}
smallhelp_panel = new small_help();
smallhelp_panel.name = "myWarning";
smallhelp_panel.x = mouseX - 50;
smallhelp_panel.y = mouseY + 15;
smallhelp_panel.helptext.text = the_text;
stage.addChild(smallhelp_panel);
addEventListener(Event.ENTER_FRAME, trackmouse);
var myTween:Tween;
myTween = new Tween(smallhelp_panel, "alpha", None.easeOut, 1, 0, myTimer, true);
tweenholder = myTween;
tweenArray.push(tweenholder);
myTween.addEventListener(TweenEvent.MOTION_FINISH, removeTween);
}
這是我的工具提示處理程序。供參考
我吐溫卸妝:
public function removeTween(e:TweenEvent = null):void{
e.target.removeEventListener(TweenEvent.MOTION_FINISH, removeTween);
if(smallhelp_panel != null){
removeEventListener(Event.ENTER_FRAME, trackmouse);
stage.removeChild(smallhelp_panel);
smallhelp_panel = null;
}
}
和我的鼠標跟蹤器與鼠標移動的工具提示是一個簡單的:
public function trackmouse(e:Event):void{
smallhelp_panel.x = mouseX - 50;
smallhelp_panel.y = mouseY + 15;
}
我嘗試了這一點,並完美的作品。 我的問題有一段時間,我的補間被垃圾收集,我試圖使用對象和持有人。該對象適用於我只有一個補間的場合,但添加了多個我發現我需要一個數組。所以我的理由是如果對象工作,將該對象放入數組將存儲它。 這是一個初學者的錯誤,通過。但是,當我退出某個部分時,我會清除數組和對象以釋放這些資源。 這工作就像一個魅力,我不能說謝謝你。 – 2011-12-17 01:42:21
曾經很多:)不客氣。我可能會建議,爲了將來,您可以使用TweenLite/TweenMax(http://www.greensock。com/greenlite /)還是另一個補間庫?他們通常表現比fl.transition更好.Tween更容易管理,並且還帶有一個方便的API。 – weltraumpirat 2011-12-17 07:57:58