2016-12-06 31 views
0

我有一個主要的swf加載其他swfs。一切正常的代碼下面是主SWF內(草圖):如何在文檔類中使用訪問階段加載外部swf?

var loader:Loader = new Loader(); 
stage.addChild(loader); 
loader.load(new URLRequest('external.swf')); 

但是,試圖加載使用文檔類外部SWF的時候,它有一個訪問錯誤的stage對象。更清晰,文檔類被配置成在將要加載的SWF出版物:

Classe de documento Main

Main.as內部,具有用於訪問代碼的階段的類:

package { 
    import flash.display.MovieClip; 
    public class Main extends MovieClip { 
     public function Main() { 
      // access stage 
      trace(stage); 
      trace(stage.stageWidth); 
     } 
    } 
} 

當主要swf試圖加載外部swf,發生錯誤:

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

如何解決這個問題?

回答

1

不要在加載的swf的構造函數中引用stage。改爲訂閱Event.ADDED_TO_STAGE

package { 
    import flash.display.MovieClip; 
    public class Main extends MovieClip { 
     public function Main() { 
      trace("1 stage="+stage); // null, if this swf is loaded 
      addEventListener(Event.ADDED_TO_STAGE, onAddedToStage); 
     } 
     protected function onAddedToStage(event:Event):void 
     { 
      trace("2 stage="+stage); // object 
     }   
    } 
} 

UPDATE:如果您不能修改加載的SWF,您可以覆蓋其主要的類定義爲您的裝載機瑞士法郎。如果加載的swf的Main類包含重要的和/或不斷變化的邏輯,這可能會產生不希望的結果。

  1. 在定義Main類在你擁有了它在你加載的SWF相同的封裝裝載機瑞士法郎。
  2. 在Main構造函數中用ADDED_TO_STAGE正確寫入適當的操作以正確訪問階段。
  3. 使這個Main編譯成你的加載程序swf:在你的主swf代碼中添加Main;(這也可以在flash builder中用編譯參數完成,但爲什麼要麻煩)。

這樣就完全替換了Main的定義。

+0

這確實有效,但如果我無法更改外部swf,是否還有另一種可能性? – bio

+0

@biio然後將'swf'添加到'main'類,而不是階段 –

+0

感謝您的回覆! – bio