2011-02-18 72 views
1

我有一個SWF主時間軸上的一個Flash動畫,有幾個圖層,一些函數和一些關鍵幀標籤。例如,我有一個碰到屏幕的明星的動畫片段,然後觸發主時間線的dispatchEvent去幀標籤「下一個」。AS3加載程序不斷重新加載相同的SWF

這裏是主時間軸使用的ActionScript的示例:

Stars.addEventListener("fadeInTitle",_fadeInTitle); 

function _fadeInTitle(e:Event):void { 
    Title.gotoAndPlay("fadeIn"); 
    Stars.removeEventListener("fadeInTitle",_fadeInTitle); 
} 

stop(); 

也就是說SWF單獨的作品完美。當我嘗試將此SWF加載到另一個時,問題就出現了。 加載程序會一直重複加載SWF,並重疊它們,忽略加載的SWF的主時間軸上的動作,時間軸連續播放。這裏是我用來加載SWF的代碼:

import flash.net.URLRequest; 
import flash.display.Loader; 
import flash.events.Event; 
import flash.events.ProgressEvent; 

function startLoad(){ 
    var mLoader:Loader = new Loader(); 
    var mRequest:URLRequest = new URLRequest("Fly.swf"); 
    mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler); 
    mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler); 
    mLoader.load(mRequest); 
} 

function onCompleteHandler(loadEvent:Event){ 
    addChild(loadEvent.target.content); 
} 

function onProgressHandler(mProgress:ProgressEvent){ 
    var percent:Number = mProgress.bytesLoaded/mProgress.bytesTotal; 
} 

startLoad(); 

這裏沒有什麼特別的。只是一個簡單的裝載機

我發現了一種解決方法,將整個動畫放在一個主動畫片段內,並將該動畫片段放在主時間軸上(一個關鍵幀,一個圖層,沒有動作),然後加載它。這樣它的工作正常,但它感覺更像是一個補丁而不是解決方案。我真的很想知道爲什麼當您嘗試加載使用主時間軸的外部SWF以及多個圖層,關鍵幀和動作時會出現問題。

任何幫助/提示將不勝感激。
非常感謝您的閱讀。

m

+0

您是否嘗試在startLoad()中放置斷點以確保它只被調用一次? – Kai 2011-02-18 19:26:00

回答

0

首先從一個函數中取出loader實例,這是沒有必要的。其次,在onComplete函數中殺掉你的監聽器。第三,如果這個加載器代碼位於加載器shell的時間軸上,確保不多於一個框架,或者如果存在(不知道爲什麼會有),在包含加載器代碼的框架上放置一個停止。或者甚至更好,使用Document類來包含加載器代碼,而不是放在時間軸上。我最好的猜測是你以某種方式再次調用startLoad()。另外,請確保已安裝Flash調試播放器,以便在瀏覽器中查看時獲得正確的錯誤報告。

var mLoader:Loader = new Loader(); 
var mRequest:URLRequest = new URLRequest("Fly.swf"); 
mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler); 
mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgressHandler); 
mLoader.load(mRequest); 


function onCompleteHandler(loadEvent:Event) 
{ 
    mLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onCompleteHandler); 
    mLoader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgressHandler); 
    addChild(loadEvent.target.content); 
} 

function onProgressHandler(mProgress:ProgressEvent) 
{ 
    var percent:Number = mProgress.bytesLoaded/mProgress.bytesTotal; 
} 
+0

感謝您的回答,您的觀點是正確的,我修改了加載程序,但它不是問題。我驚訝地發現瞭解決方案。我想對加載的fla文件做一些測試,所以我只是用另一個名字保存它,重新導出swf並在我的加載器中調用這個新的swf。根本沒有改變代碼或任何東西,它運作良好。我懷疑舊fla文件或某些隨機內存錯誤會造成某種程度的損壞。 – 2011-02-19 05:47:13