我目前堅持的情況是我無法在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 }
_nextQuest變量的類型爲Class,默認情況下設置爲null,直到單擊按鈕時,menuSelect函數會觸發。如果要查找類類型對象,我將如何將_nextQuest的類型更改爲Sprite?我試過這個,我得到了錯誤「類型爲flash.display:Sprite的值的隱式強制轉換爲無關類型的類。」至於一行,這是從輸出面板直接複製+粘貼,所以沒有其他行號在這裏幫助我。你在哪裏看到removeChild()在? – hRdCoder
我使用removeChild作爲一個例子,我可能會導致「必須是調用者的孩子」錯誤,但是如果沒有更多的信息,這可能是猜測。但是,它看起來像在第76行的Main.as中發生錯誤。 也許第一個涉及Quest的錯誤與_nextQuest無關。必須有一些其他的地方,Game5試圖在應該使用Quest類型的地方使用。 我注意到Game對象是一個Class類的向量。但是,它添加了Game5,它是Sprite類型。嘗試使用數組。 – bandaro
我會嘗試。我會將第76行的功能添加到問題中,以便可以清除問題。 – hRdCoder