Re: [問題] Tween無法addEventListener
: private function initial():void
: {
: for (var i:Number = 1; i <= 3; i++)
: {
: lo = new Loader();
: re = new URLRequest("bmp/"+i+".jpg");
: this.lo.load(re);
: this.addChild(lo);
: this._tween = new Tween(lo,"alpha",Strong.easeOut,0,1.0,3,true);
因為 _tween 宣告成全域變數的關係,所以迴圈跑完
_tween 只會指向 i=3 的那次 Tween
: this._tween.addEventListener(TweenEvent.MOTION_FINISH,_mf);
: }
: return;
: }
: function _mf(event:TweenEvent):void
: {
: trace("finish");
: this._tween.removeEventListener(TweenEvent.MOTION_FINISH,this._mf);
: this._tween = null;
如上面所說,不管這是哪一個 Tween 觸發的 event
都只會把 i=3 的 Tween 移除事件
所以當有第二個 Tween 完成的時候
_tween 已經是 null 了,會跳錯誤
: this.lo.unload();
: return;
: }
: }
: }
還有一點是你三個 Tween 同時 start,沒有時間差阿 ...
參考一下我幫你修改過後的,應該滿好懂的
public class main extends MovieClip
{
private var lo:Loader;
private var re:URLRequest;
private var arr:Array;
public function main()
{
arr = [];
for (var i:Number = 1; i <= 3; i++)
{
addTween(i);
}
arr[0].start();
}
private function addTween(i:int):void
{
lo = new Loader();
re = new URLRequest("/bmp/" + i + ".jpg");
lo.load(re);
lo.alpha = 0;
addChild(lo);
function onFinish(e:TweenEvent):void
{
_tween.removeEventListener(TweenEvent.MOTION_FINISH, onFinish);
_tween = null;
arr.shift();
if (arr.length) {
arr[0].start();
}
}
var _tween = new Tween(lo, "alpha", Strong.easeOut, 0, 1.0, 3, true);
_tween.addEventListener(TweenEvent.MOTION_FINISH, onFinish);
_tween.stop();
// tween 預設好像會自己 start!?
arr.push(_tween);
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.121.204.118
推
04/16 16:17, , 1F
04/16 16:17, 1F
→
04/16 16:18, , 2F
04/16 16:18, 2F
推
04/16 20:58, , 3F
04/16 20:58, 3F
推
04/17 00:07, , 4F
04/17 00:07, 4F
推
04/17 01:11, , 5F
04/17 01:11, 5F
推
04/17 01:19, , 6F
04/17 01:19, 6F
→
04/17 01:20, , 7F
04/17 01:20, 7F
→
04/17 01:21, , 8F
04/17 01:21, 8F
看你的想法 是想要等前一個tween完成後再執行下一個 addTween()對嗎?
如果是這樣可以用 timer,每三秒鐘執行一次 addTween,然後把stop()拿掉
不過感覺有點多此一舉
另外就算迴圈跑的再快再慢,onFinish都會執行的,因為已經有偵聽 Event了
你可以在 onFinish裡面加個全域變數 count測測看,一定會執行到三次的
補上時間軸幫助你理解:
執行三次addTween() → arr[0]的tween開始執行 → 三秒後 →
第一個 tween完成,從arr內移除,執行下一個 tween → 三秒後 →
第二個 tween完成,從arr內移除,執行下一個 tween → 三秒後 →
第三個 tween完成,從arr內移除,arr內沒東西了,結束
※ 編輯: jeaby 來自: 118.171.118.34 (04/17 10:31)
推
04/17 10:43, , 9F
04/17 10:43, 9F
→
04/17 10:44, , 10F
04/17 10:44, 10F
推
04/17 10:46, , 11F
04/17 10:46, 11F
→
04/17 10:48, , 12F
04/17 10:48, 12F
→
04/17 10:49, , 13F
04/17 10:49, 13F
推
04/18 07:32, , 14F
04/18 07:32, 14F
→
04/18 07:33, , 15F
04/18 07:33, 15F
→
04/18 07:33, , 16F
04/18 07:33, 16F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
Flash 近期熱門文章
PTT數位生活區 即時熱門文章