0

我目前遇到的情况是我无法在我的 FlashDevelop 项目中加载和显示外部 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 Game5@855b0a1 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  }
4

1 回答 1

0

_nextQuest 是否键入为 Quest?如果是这样,当 _nextQuest 被指定为 Game5 时,由于 Game5 不是从 Quest 扩展而来,而是从 Sprite 扩展而来,因此您会收到第一个错误。您可以通过将 _nextQuest 的类型更改为 Sprite 来解决此问题。我不确定 Quest.as 扩展或做什么,所以我真的不能就此提供任何建议。

至于其他错误,您是否给出了它们发生的位置?这可能有助于找到确切的问题,但看起来“removeChild()”正在调用尚未添加的内容。那是我最常收到该错误的时候。

编辑:看起来您的加载文件的 URL 没有被找到。检查以确保它与 swf 相关,它不在任何目录或更高级别。

于 2013-06-12T14:46:19.580 回答