伊莉討論區

標題: 關於外連SWF之切換問題 [打印本頁]

作者: amily791012    時間: 2012-5-16 10:46 PM     標題: 關於外連SWF之切換問題

提示: 作者被禁止或刪除 內容自動屏蔽
作者: aloner112    時間: 2012-5-16 11:14 PM

本帖最後由 aloner112 於 2012-5-16 11:28 PM 編輯

你發生的是什麼問題?沒有unload上一個swf?
作者: amily791012    時間: 2012-5-16 11:36 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: aloner112    時間: 2012-5-16 11:44 PM

amily791012 發表於 2012-5-16 11:36 PM
第一個檔案goto第二個 是OK的

但第二個要回第一個 就回不去...會出現 ...NUll之錯誤 ...

請問你是用第三個swf檔(我假設它命名為index.swf)來載入A.swf與B.swf嗎?
還是只有A.swf與B.swf兩個檔案互切?
作者: amily791012    時間: 2012-5-16 11:50 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: aloner112    時間: 2012-5-16 11:53 PM

amily791012 發表於 2012-5-16 11:50 PM
我是只有用A.swf和B.swf去做切換...並沒有設置載入的index.swf

所以你的程式碼是全部寫在A.swf內?還是分別寫在A.swf與B.swf內部?
作者: amily791012    時間: 2012-5-16 11:54 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: aloner112    時間: 2012-5-17 12:10 AM

本帖最後由 aloner112 於 2012-5-17 06:59 AM 編輯
amily791012 發表於 2012-5-16 11:54 PM
是分別寫在A.swf和B.swf

第一個檔案的是A.swf

那麼,首先,我會建議你把全部的程式碼都寫在A.swf內,用A去載B。
因Loader只是一個放在A裡面的「容器」,我姑且模糊點就把整個A當作是一個容器吧
你的程式是把B放進A這個容器中,然而當你要用B來載A時,你等於是再把A放進A容器中的B容器,這樣肯定會有問題。
我建議你把A.swf中的內容整個包進一個MovieClip裡,假設我將這個MovieClip命名為AContent。
當你要載入B.swf時,removeChild(AContent);
當要從B.swf切回A時,unload掉Loader,然後addChild(AContent);
補充:
當你用A載入B時,要如何使用B.swf中的按鈕呢?
var Bswf:MovieClip = ButlerRoom.content as MovieClip;
然後你就可以把B.swf當作一個MovieClip來使用了,同時你也可以使用其內部元件。

假設B.swf中的舞台上有一個叫做btn001的按鈕,你就可以用Bswf.btn001來呼叫它。

再補充:Loader要載入完成後才能將Loader的content當作MovieClip使用,詳見本串後面的回覆

作者: amily791012    時間: 2012-5-17 12:30 AM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: aloner112    時間: 2012-5-17 12:44 AM

本帖最後由 aloner112 於 2012-5-17 01:37 AM 編輯
amily791012 發表於 2012-5-17 12:30 AM
我將A.swf改寫成

那你改用ACount.visible=false;吧
補充:
ArgumentError: Error #2025: 提供的 DisplayObject 必須是呼叫者的子系。
剛測試了一下,這個錯誤原因可能是:
1. //stage.addChild(ACount); ←你把這行槓掉了,所以舞台上根本就沒有ACount這個東西。並且,建議你改寫成MovieClip(root).addChild(ACount); 。這是因為stage不能轉型成MovieClip來處理很麻煩…
2. 你滑鼠點了不只一次。你在點第一下滑鼠的時候就已經remove掉ACount了(這次沒有回報錯誤),因此點第二下時舞台上找不到ACount,就回報錯誤。


而且,跳到B.swf時...A.swf還留在場景上..

你有沒有把原本A.swf上的東西裝進ACount裡…?
作者: amily791012    時間: 2012-5-17 01:37 AM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: aloner112    時間: 2012-5-17 01:40 AM

本帖最後由 aloner112 於 2012-5-17 01:43 AM 編輯
amily791012 發表於 2012-5-17 01:37 AM
那請問一下大大,這樣是要用兩個var ButlerRoomoader = new Loader();
嗎?
還是只要一個Loader就好? ...

只要一個Loader就好,不需要兩個。Loader的內容還可以unload掉再重load,這樣就算有很多頁要切,你也還是可以只用一個Loader

作者: amily791012    時間: 2012-5-17 01:56 AM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: aloner112    時間: 2012-5-17 06:41 AM

本帖最後由 aloner112 於 2012-5-17 07:02 AM 編輯
amily791012 發表於 2012-5-17 01:56 AM
大大,我重新改寫之後...

會出現
ButlerRoom1.load(new URLRequest("a.swf"));

你為什麼要連結a.swf?你自己不就是a.swf嗎?
MovieClip(root).addChild(Aswf);
要addChild(ButlerRoom1),也就是放Loader進來,而不是放Aswf

然後我忘了一件事……Loader要load完後才能把其內容當作MovieClip看待,寫法是這樣:
  1. //為ButlerRoom1這個Loader加監聽器,當載入完畢後,執行loaderCompleteHandler這個函數
  2. ButlerRoom1.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderCompleteHandler);
  3. //當ButlerRoom1載入完成後要執行的函數
  4. function loaderCompleteHandler(e:Event):void{
  5.         
  6.         //這行要寫在這裡,因為要載入完成後,ButlerRoom1的content才存在
  7.         var Bswf:MovieClip = ButlerRoom1.content as MovieClip;
  8.         
  9.         //會使用到Bswf內部元件的程式,全部要寫在loaderCompleteHandler這個函數裡面
  10.         topage_btn.addEventListener(MouseEvent.CLICK,intoButler);
  11.         function intoButler(e:MouseEvent):void{
  12.                 //略
  13.         }
  14.         
  15. }
複製代碼


作者: amily791012    時間: 2012-5-17 01:54 PM

提示: 作者被禁止或刪除 內容自動屏蔽
作者: aloner112    時間: 2012-5-17 02:31 PM

本帖最後由 aloner112 於 2012-5-17 03:13 PM 編輯
amily791012 發表於 2012-5-17 01:54 PM
首先,先感謝大大的回覆,
以下是根據大大提供的方法所寫的程式碼。

因為函數outButler已經把ButlerRoom1這個Loader的內容unload掉了
所以建議你把下面這行改寫在intoButler這個函數內
ButlerRoom1.load(new URLRequest("b.swf"));這樣每次按下topage_btn時就都會重新載入ButlerRoom1 的內容

如果直接照上面說的改會出現這個問題:
ArgumentError: Error #2025: 提供的 DisplayObject 必須是呼叫者的子系。
這個問題,只要把topage_btn的監聽器以及函數intoButler都改成寫在ACount_mc裡面就可以解決了。


補充內容 (2012-5-17 03:21 PM):
另外基於程式上的潔癖,我會在函數outButler裡面追加這行:
MovieClip(root).removeChild(ButlerRoom1);
作者: ilikeher    時間: 2012-11-27 03:52 PM

提示: 作者被禁止或刪除 內容自動屏蔽




歡迎光臨 伊莉討論區 (http://a407.file-static.com/) Powered by Discuz!