2011-05-12 53 views
0

我在重新加載SWFS時遇到了一個奇怪的問題。 我開始與我的加載SWF:重新加載SWF第二次出現錯誤

var req:URLRequest = new URLRequest("RegionalIntro.swf"); 
req.method = URLRequestMethod.POST; 
req.data = true; // POST requests require non-null data 

introSWF = new Loader(); 
introSWF.load(req); 
addChild(introSWF); 

然後,一旦我完成了我卸載:

removeChild(introSWF); 
introSWF.unloadAndStop(true); 

現在,當我想重裝我再次運行代碼的第一位,我得到的SWF這個錯誤:

TypeError: Error #1009: Cannot access a property or method of a null object reference. 

我無法弄清楚爲什麼我會得到第二次加載,而不是第一次。它應該是一樣的? 這是在Windows Projector.exe文件內部完成的,它將作爲信息亭應用程序運行。

編輯:

at com.company.THPassport.exRegional::exRegionalIntro/skipTablet() 
at flash.events::EventDispatcher/dispatchEventFunction() 
at flash.events::EventDispatcher/dispatchEvent() 
at com.company.THPassport.exRegional::exRegionalLoader/userLoaded() 
at flash.events::EventDispatcher/dispatchEventFunction() 
at flash.events::EventDispatcher/dispatchEvent() 
at com.company.THPassport.utilities.DB::user/loadUserData() 
at com.company.THPassport.utilities.DB::user/checkExistingUserLoadedXML() 
at flash.events::EventDispatcher/dispatchEventFunction() 
at flash.events::EventDispatcher/dispatchEvent() 
at flash.net::URLLoader/onComplete() 

至於我可以看到它越來越錯誤從這裏:

currentUser = e.data; 

maxspeechB.parent.removeChild(maxspeechB); 
maxspeechA.parent.removeChild(maxspeechA); 
wallstageA.parent.removeChild(wallstageA); 
tabletfalls.parent.removeChild(tabletfalls); 
tabletvanishes.parent.removeChild(tabletvanishes); 

wallfills.alpha = 0; 
    if (currentUser.getCompleteAreas() == 1) { 
     wallfills.gotoAndStop(40); 
    } else if (currentUser.getCompleteAreas() == 2) { 
     wallfills.gotoAndStop(80); 
    } else if (currentUser.getCompleteAreas() == 3) { 
     wallfills.gotoAndStop(120); 
    } 
wallstageB.alpha = 1; 
Tweener.addTween(wallfills,{ alpha:1, time:1, transition: "linear", onComplete:dropSignpost}); 

我不能工作了就是爲什麼工作的第一次,但是當它重新加載它不起作用?編輯2:劇情變厚,我可以捕捉錯誤,通過try/catch塊包圍堆棧跟蹤頂部的函數中的所有代碼。我跟蹤錯誤和它一樣,奇怪的是所有代碼都按預期執行。所有工作正常,並引發錯誤...非常奇怪!我討厭這樣離開它,卻沒有找到它爲什麼這樣做,但...

+1

重新加載SWF時,您運行完全相同的代碼嗎? – 2011-05-12 15:34:40

+0

我這樣做。它在加載介紹的函數中,所以我再次調用該函數。 – 2011-05-12 15:37:07

+1

Ben,你的代碼第5行中有幾個問題,你爲什麼不從'var introSWF:Loader = new Loader()'開始(換句話說,你以前是否已經初始化了它?)另外,你有沒有嘗試瞭解代碼的各個部分來查看它仍然會出錯?這應該有助於確定是否導致錯誤的加載(或卸載)。最後,如果你實際上沒有發送任何東西,你爲什麼要使用POST方法? – mattstuehler 2011-05-12 15:49:46

回答

0

本 - 是否有第二行到那個錯誤?它可能會告訴你錯誤是由「RegionalIntro.swf」引發的,而不是你的包裝swf。

這是可能的事情發生在時間相關的SWF中。換句話說 - 它可能會利用一些需要在被調用之前加載/初始化的資產,有時它還沒有準備好。

+0

我已經添加了一個編輯。我已經展示過的這個函數只會被調用一次,加載的SWF已經說過它已經被添加到了舞臺上。追蹤我要移除的對象,或者我使用的屬性顯示它們在那裏。 – 2011-05-12 16:00:27

1

嘗試將一個完整的事件偵聽器添加到loader.contentLoaderInfo,並在事件偵聽器處理程序中執行低於loader.load(如addChild(introSWF);)的所有操作。即使不需要,它也可以幫助您防止您嘗試使用尚未加載的對象的情況。

+0

我可能已經做了一個稍微倒退的方式。(這是我拿起AS3書籍以來的第一個大項目)我所做的是在加載的SWF的doc類中,我已經爲構造函數添加了一個用於ADDED_TO_STAGE的eventlistener,它觸發了一個init函數,它將調度一個事件給告訴父母SWF準備好數據並從舞臺上刪除某些東西。這與你用不同的方式說過的一樣嗎? – 2011-05-12 16:09:31

+0

也只是嘗試添加,因爲我做錯了,我仍然收到錯誤... – 2011-05-12 16:12:59

+1

你基本上是做同樣的事情(因爲加載器添加加載內容到顯示器後才加載),但絕對不最好的做法:) – 2011-05-12 16:16:48

相關問題