2013-06-12 130 views
0

我目前堅持的情況是我無法在FlashDevelop項目中加載和顯示外部swf文件。通常我可以在沒有問題的情況下做到這一點,但是這裏存在的問題是因爲其他人編寫了加載包括這個加載swf的每個類的文件。無法動態加載外部SWF?

這裏是在加載類的主類的相關代碼:(我沒有寫這個。)

_types = new Vector.<Class>(); 
_labels = new Vector.<String>(); 
_types.push(Game1, Game2, Game3, Game4, Game5); 
_labels.push("Game1", "Game2", "Game3", "Game4", "Game5"); 

...有按鈕,然後添加到屏幕,引導您這些遊戲之一。當點擊一個按鈕時,此功能被調用:

private function menuSelect(evt:MouseEvent):void 
    { 
     if (gameDo[evt.target.name]<2){ 
      gameDo[evt.target.name] ++; 
      cycle++; 
     } 

     _nextQuest = _types[evt.target.name]; 
    } 

我打電話的遊戲是Game5。當這個類被加載時,它會嘗試加載一個具有實際遊戲內容的外部swf文件。這裏是類:

package 
{ 
import flash.display.Loader; 
import flash.display.MovieClip; 
import flash.display.Sprite; 
import flash.events.Event; 
import flash.events.IOErrorEvent; 
import flash.net.URLRequest; 
/** 
* ... 
* @author 
*/ 
public class Game5 extends Sprite implements LoaderMod 
{ 
    private var _loader:Loader; 

    public function Game5():void 
    { 
     _loader = new Loader(); 
     _loader.load(new URLRequest("Game5.swf")); 
     _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loader_complete); 
    } 

    public function loader_complete(evt:Event):void 
    { 
     var _loadedData:MovieClip = new MovieClip(); 
     _loadedData.addChild(evt.currentTarget.content); 
     this.addChild(_loadedData); 
    } 

} 

當我運行這段代碼,這些是我得到的錯誤:

[Fault] exception, information=TypeError: Error #1034: Type Coercion failed: cannot 
convert [email protected] to Quest. 
Fault, onEnterFrame() at Main.as:76 
[Fault] exception, information=ArgumentError: Error #2025: The supplied DisplayObject 
must be a child of the caller. 
Error #2044: Unhandled IOErrorEvent:. text=Error #2035: URL Not Found. 
[Fault] exception, information=ArgumentError: Error #2025: The supplied DisplayObject 
must be a child of the caller. 
[Fault] exception, information=ArgumentError: Error #2025: The supplied DisplayObject 
must be a child of the caller. 

而且最後四行中的錯誤不斷產生的遊戲運行。至於錯誤中前兩行「不能將Game5 @ 855b0a1轉換爲Quest」,項目中還有另一個類叫做Quest.as,它被其他類擴展爲某種超級類。我寫的唯一代碼是Game5.as類。

所有幫助表示讚賞。謝謝!

編輯!

這裏就是線76的錯誤是在發生的onEnterFrame()函數:

70 protected function onEnterFrame(evt:Event):void 
71 { 
72  if (_nextQuest) 
73  { 
74   removeChild(mainMenu); 
75   removeChild(_menu); 
76   _quest = new _nextQuest(); 
77   addChild(_quest); 
78   _nextQuest = null; 
79  } 
80  if (_quest) 
81  { 
82   if (! _quest.update()) 
83   { 
84    removeChild(_quest); 
85    _quest = null; 
86    questions.questions(); 
87    this.addChild(questions); 
88   } 
89  } 
90 } 

回答

0

是_nextQuest類型爲任務?如果是這樣,當_nextQuest被分配爲Game5時,由於Game5不是從Quest擴展而是Sprite,所以會得到第一個錯誤。您可以通過將_nextQuest的類型更改爲Sprite來解決此問題。我不確定Quest.as延伸或做了什麼,所以我不能給出任何建議。

至於其他的錯誤,你給他們發生線?這對找到確切的問題可能有幫助,但看起來像「removeChild()」被調用的東西還沒有被添加。那是我最常收到錯誤的時候。

編輯:看起來你的URL沒有被找到。檢查以確保與swf相關的是正確的,它不在任何目錄或上一級。

+0

_nextQuest變量的類型爲Class,默認情況下設置爲null,直到單擊按鈕時,menuSelect函數會觸發。如果要查找類類型對象,我將如何將_nextQuest的類型更改爲Sprite?我試過這個,我得到了錯誤「類型爲flash.display:Sprite的值的隱式強制轉換爲無關類型的類。」至於一行,這是從輸出面板直接複製+粘貼,所以沒有其他行號在這裏幫助我。你在哪裏看到removeChild()在? – hRdCoder

+0

我使用removeChild作爲一個例子,我可能會導致「必須是調用者的孩子」錯誤,但是如果沒有更多的信息,這可能是猜測。但是,它看起來像在第76行的Main.as中發生錯誤。 也許第一個涉及Quest的錯誤與_nextQuest無關。必須有一些其他的地方,Game5試圖在應該使用Quest類型的地方使用。 我注意到Game對象是一個Class類的向量。但是,它添加了Game5,它是Sprite類型。嘗試使用數組。 – bandaro

+0

我會嘗試。我會將第76行的功能添加到問題中,以便可以清除問題。 – hRdCoder