如何使用嵌入的xml文件加载.swf,然后从该xml文件中实例化一个对象?

时间:2013-10-22 03:38:10

标签: xml actionscript-3 flash

基本上,我正在开发Flash游戏,我希望能够将mod加载到游戏中。每个mod都是一个带有嵌入式xml文件的.swf文件,该文件包含有关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++;
}

1 个答案:

答案 0 :(得分:0)

您可以使用具有正确MIME类型的Embed标记在SWF中嵌入XML文件。直接在下面定义的类变量将在实例化时包含嵌入文件的数据。这是一个嵌入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的{​​{1}}媒体资源中收听该活动,也可以查看content媒体资源,以防其被解雇。