如何将动作2转换为动作3?

时间:2011-11-15 11:26:58

标签: flash actionscript-3 actionscript-2

代码是
  import mx.events.EventDispatcher;   import Proxy;

以下是课程定义。

class XMLLoad extends EventDispatcher{
public var XML_NODE_TYPE_TEXT = 3;
public var XML_NODE_TYPE_ELEMENT = 1;
private var xmlPath:String;
private var xmlObj:Object;
private var classObj:Object;
private var data_xml:XML;
private var loadedxmldata:XML;
private var success:Boolean;

public static var LOAD_SUCCESS:String = "xmlObjCreated";
public static var LOAD_FAILED:String = "xmlObjFailed";

所有这些代码都属于同一个类 以下是上面课程中的函数

public function XMLLoad() {
    loadedxmldata = new XML();
    classObj = new Object();
}

public function setXMLObject(_xmlPath:String):Void {
    xmlPath = _xmlPath;
    data_xml = new XML();
    data_xml.ignoreWhite = true;
    data_xml.load(xmlPath) 
    data_xml.onLoad = Proxy.create(this, loadXml, success, data_xml);
}

public function getLoadedXML():XML {
    return loadedxmldata;
}

private function loadXml(success):Void {
    if (success) {
        loadedxmldata = data_xml
        xmlObj = XMLDocToObject(data_xml);
        var eveObj:Object = {target:this, type:LOAD_SUCCESS, xmlObj:xmlObj, nativeXMLObj:data_xml}
        dispatchEvent(eveObj)
    } else {
        var eveObj:Object = {target:this, type:LOAD_FAILED, nativeXMLObj:data_xml}
        dispatchEvent(eveObj)
    }
}

public function XMLDocToObject(oXML):Array {
    var obj = [];
    if (oXML == null) {
        return obj;
    }
    var eRoot = oXML.firstChild;
    if (eRoot != null) {
        obj = buildObject(obj, eRoot);
    }
    return obj;
}

private function buildObject(obj, eItem):Array {
    var idx, eChild;
    var oTarget;
    while (eItem != null) {
        idx = eItem.nodeName;
        if (eItem.nodeType == XML_NODE_TYPE_ELEMENT) {
            oTarget = buildObject({}, eItem.firstChild);
            for (var attrib in eItem.attributes) {
                oTarget[attrib] = eItem.attributes[attrib];
            }
            if (eItem.nodeValue != null) {
                oTarget._value = eItem.nodeValue;
            } else {
                eChild = eItem.firstChild;
                if (eChild != null) {
                    if (eChild.nodeType == XML_NODE_TYPE_TEXT) {
                        if (eChild.nodeValue != null) {
                            oTarget._value = eChild.nodeValue;
                        }
                    }
                }
            }
        if (obj[idx]._type != 'array') {
            obj[idx] = [obj[idx]];
            obj[idx]._type = "array";
            obj[idx][0] = oTarget;
        } else {
            obj[idx][obj[idx].length] = oTarget;
        }
    }

这些是功能。在课堂上。

2 个答案:

答案 0 :(得分:2)

我建议取出AS2 swf。创建一个AS3包装器加载你的as2 swf。如果需要,您可以在两者之间进行沟通。

答案 1 :(得分:0)

将AS2转换为AS3并非易事。 2之间存在几个概念上的差异,即使具有良好知识的聪明人可以进行必要的更改,代码的实际功能也不会相同,他们将实现相同的目标,但不一样

如果你想要这样做,你将不得不自己动手,了解4000动画使用和做的事情,并编写自己的转换器,以你的方式转换它们。如果您不知道AS3或AS2,请在此处粘贴代码,如果它足够简单,我可以为您翻译其中的一个。