2015-02-08 18 views
0

我有我的遊戲。第一幀是開始遊戲按鈕的放置位置 - 它讓我在第二幀處獲得我的遊戲級別。在第二幀輸入時會播放一個淡入淡出的MovieClip,並在結尾處我會輸入MovieClip(root).addChild(character);以輸入可播放的角色。如何在MovieClip結尾處啓動eventListeners?

我的問題是,鍵盤事件的eventListeners是在主時間軸代碼中,如果我按任何移動字符的鍵,它將開始移動,即使它沒有出現,因爲淡出沒有完成。

有沒有辦法解決這個問題,或者我在哪裏做錯了?

如果需要,我會發布我的代碼位。謝謝!

回答

0

有很多方法來解決這個問題,但這裏是我建議:

1)在你的主要時間,創建一個函數來增加你的性格和鍵盤監聽器:

function beginPlaying():void { 
    addChild(character); 
    stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler); 
    // etc 
} 

2)在您的淡入淡出影片剪輯,在結束時,你只需要調用這個函數:

MovieClip(root).beginPlaying(); 

這應該解決您當前的問題,並希望更容易對付任何類似的未來概率LEM。

+0

這很簡單。我應該想到這一點。謝謝! – Vlad 2015-02-08 09:46:06

0

該解決方案有效,但它有一個潛在的問題,因爲控制您的遊戲的代碼現在部分隱藏在某個MovieClip中。當我需要改變,尋找或記憶某些東西時,我自己多次做到了這一點,並經常遇到麻煩。

一個稍微好一點的解決方案不是直接調用一些根本的功能,但只是分派事件:

dispatchEvent(Event.COMPLETE); // or any custom event 

所以,現在你的影片剪輯不必調用特定功能的根,它只是拋出一個事件,你的時間表可以有一個監聽器。

Furthermove,建議擺脫推子動畫片段中的所有代碼。再次,您可以爲根中的Event.ENTER_FRAME添加一個監聽器,並檢查推子是否已完成(fader.currentFrame == fader.totalFrames)

+0

我按照你的建議做了,它工作得很好。對於任何願意使用此方法的人:添加一個事件偵聽器以使其工作 - movieclip_name.addEventListener(Event.ENTER_FRAME,function),並將您的代碼發生在該函數中。 – Vlad 2015-02-09 18:15:18