flash as3 - 了解如何将已解析的XML数据传递给类

时间:2011-11-30 22:25:45

标签: xml flash actionscript-3 oop

我传统上将所有as3代码放在一个包含的.as文件中,而不是作为包/类文件,但我试图进行转换。我对如何在类文件中来回传递信息感到有些困惑。例如,我尝试制作的是一种节点图,点击某个节点会弹出其子节点,点击子节点会发出它的子节点等。我有一个主类,Main.as,我将解析一个XML文档并存储每个节点的所有相关数据的数组(如标题,链接等)。然后我有一个名为Node.as的类文件,它实际构建节点,将其添加到舞台,并设置其侦听器和补间动画。

我的问题是 - 如果节点的所有信息都存储在Main.as中,但点击处理是在Node.as中完成的,那么Node.as如何知道要为每个添加的节点分配哪些属性(即如何它是否从Main.as访问数组以将属性分配给创建的剪辑?

这是一个示例代码结构:

Main.as:

package  
{   
    public class Main extends MovieClip  
    {  

        public function Tree()  
        {  
            initTree();
        }

        public function initTree(){
            parseXML();
            var firstNode:Node = new Node();
            addChild(firstNode);
        }
    }  
}

Node.as:

package  
{  
    public class Node extends MovieClip  
    {   
        public function Node()  
        {  
            drawNode();
        }

    private function drawNode(parentNode = null){
        //draw the node shape
        //add the shape to a movie clip
        //assign listeners to the movie clip
        //add movie clip to the stage
    }

    private function nodeAdded {
        //position the node
        //animate the node
    }

    private function nodeOver (e:MouseEvent):void {
        //fetch the information for this node from the XML in Main.as - how do I do this?
    }
}

1 个答案:

答案 0 :(得分:1)

将构造函数中使用参数的内容传递给节点类实例。

例如:

 package   {  
     public class Node extends MovieClip   {   

         private var contentToDisplay:XML;

         public function Node(_contentToDisplay:XML) {
              contentToDisplay = _contentToDisplay;
              drawNode();
         }

 }

通过这种方式,您可以在构建该类的实例时传递信息,并将其存储为可在该实例内部使用的变量。您还可以设置一些“id”变量,以帮助从类外部识别您的节点。或者您在主类中创建节点,向它们传递应显示的信息,并在主类中存储在数组中创建的节点的引用。

希望它有所帮助!