2013-04-02 37 views
0

我試圖設置包含在一個名爲'map'的大MovieClip中的每個MovieClip的深度。 要做到這一點,我做了事件ENTER_FRAME運行的功能,即:設置Movieclip的子級深度時無法更改Movieclip的當前幀

public function set_depth(map:MovieClip) { 
    var arr:Array = []; 
    for(var i=1;i<=map.numChildren;i++) { 
     arr.push({ "name" : map.getChildAt(i-1).name, "y" : map.getChildAt(i-1).y}); 
    } 
    arr.sortOn("y", Array.NUMERIC); 

    for(var h=0;h<arr.length;h++) { 
     map.setChildIndex(map.getChildByName(arr[h].name), h); 
    } 
} 

什麼功能基本上沒有基於其y屬性進行排序影片剪輯並設置基於的進排序列表中的影片剪輯指數 影片剪輯(y屬性最終會自行更改,因此 索引順序也會改變)。問題是,我似乎無法改變'地圖'MovieClip幀 'set_depth'功能連續運行,例如我想每次更改地圖當前幀 我按下Shift鍵,看起來像這樣:

public function whenKeyUp(e:KeyboardEvent) { 
    if(e.keyCode == 16) { 
     trace('Shift pressed'); 
     map.gotoAndStop(2); 
    } 
} 

每當我按下Shift鍵時,什麼都沒有發生,儘管跟蹤功能被調用。但是,如果 'set_depth'函數被註釋/刪除,則映射MovieClip將其幀更改爲2,沒有任何問題。

那麼,有沒有代碼有問題?我可以以某種方式修復它,以便在set_depth函數運行時地圖MovieClip可以更改其框架 ?還是有其他解決方案嗎?提前致謝。請原諒我的英語

+0

如何影片剪輯放置在地圖內。我的意思是地圖MovieClip的內部結構如何? –

+0

它位於「地圖」MovieClip的下方,例如:map.hero,map.dummy,map.house等 – iwakuya

+0

它們放置在不同的關鍵幀上嗎? –

回答

0

假設setDepth(地圖)從功能yourEnterFrame(五:事件)被稱爲

更改爲

public function whenKeyUp(e:KeyboardEvent) { 
    if(e.keyCode == 16) { 
     map.removeEventListener(Event.ENTER_FRAME, yourEnterFrame); 
     map.addEventListener(Event.ENTER_FRAME, frameHunt); 
     trace('Shift pressed'); 
     map.gotoAndStop(2); 
    } 
} 

。而請添加此

public function frameHunt(e: Event){ 
var map:MovieClip = MovieClip(e.target); 
    if(map.currentFrame != 2) return; 
    map.removeEventListener(Event.ENTER_FRAME, frameHunt); 
    map.addEventListener(Event.ENTER_FRAME, yourEnterFrame); 
} 
+0

謝謝,必須儘快嘗試!我會讓你知道它是否工作 – iwakuya

+0

addFrameScript似乎不適用於此。 「地圖」MovieClip仍然無法更改。這很奇怪,它沒有顯示編譯或運行時錯誤。如果您有興趣,我可以通過電子郵件或其他方式向您發送.fla和.as。謝謝 – iwakuya

+0

我改變了方法。這次沒有布爾標誌。只是事件信號。請嘗試。 – Ihsan