0

基本上,我正在开发一款 Flash 游戏,我希望能够将模组加载到游戏中。每个 mod 都是一个 .swf 文件,其中包含一个嵌入的 xml 文件,该文件包含有关 mod 的所有信息(名称、版本、主类等),然后实例化该主类(扩展类插件)。我有一个基本上我想怎么做的模型(根据我在 Java 中的经验),但我对嵌入等事情不太清楚,有人可以指导我吗?

粗略的例子:

//Loads the .swf file
private var i:int = 0;
private static function onLoadComplete(e:Event) {
    //xml would (supposedly, not too sure how this works) be the embedded xml file
    var pluginMain:Class = getDefinitionByName(e.target.content.xml.Main[0]) as Class;
    var plugin = new pluginMain();
    //initiate() is a function of my class Plugin, which plugin should extend
    plugin.initiate(this);
    plugins[i] = plugin;
    i++;
}
4

1 回答 1

0

Embed您可以通过使用具有正确 MIME 类型的标记将 XML 文件嵌入到 SWF 中。直接在下面定义的类变量将在实例化时包含嵌入文件的数据。这是一个嵌入 XML 文件的示例文档类,在加载时对其进行实例化,并在完成后分派一个“READY”事件:

package  {

    import flash.display.Sprite;
    import flash.events.Event;

    public class Mod extends Sprite {

        [Embed(source="../xmldir/mod_data.xml", mimeType="application/octet-stream")]
        public var ModData:Class;

        public static const READY:String = "READY";

        public var modXml:XML;
        public var ready:Boolean = false;

        public function Mod() {
            data_init();
        }

        private function data_init():void {
            var modDataXML:XML = XML(new ModData());
            ready = true;
            dispatchEvent(new Event(READY));
            //trace(modDataXML.Main[0]);
        }

    }
}

Loader你可以从你的属性中监听事件content,或者只是检查content.ready属性,以防它已经被触发。

于 2013-10-22T09:05:29.463 回答