从自定义类获取数据(一个面向对象的问题)自定义、面向对象、数据、问题

2023-09-08 15:27:00 作者:月白流苏谨色安年

我如何从一个自定义类得到一些无功/数据?

XML类

 包中的类
{
    进口flash.net.URLLoader;
    进口flash.net.URLRequest;
    进口对象类型:flash.events.Event;
    进口的flash.display.MovieClip;

    公共类可视数据扩展影片剪辑
    {
       私人VAR与myXML:XML;
       私人VAR myXMList:XMLList中;

       公共职能可视数据()
       {
          VAR myXMLLoader:的URLLoader =新的URLLoader();
          myXMLLoader.load(新的URLRequest(playlist.xml));
          myXMLLoader.addEventListener(引发Event.COMPLETE,的processXML);
       }

       私有函数的processXML(五:事件):无效
       {
          与myXML =新的XML(e.target.data);
          myXMList =新的XMLList(myXML.children());
       }

       公共职能的getXML()
       {
          返回与myXML;
       }
    }
}
 

这是调用XML类

 包中的类
{
    进口的flash.display.MovieClip;
    进口flash.events.MouseEvent;
    进口classes.videoData;

    公共类播放列表扩展影片剪辑
    {
       私人VAR VDATA:可视数据=新的可视数据();

       公共职能的播放列表()
       {
          跟踪(vData.getXML())
       }
    }
}
 

解决方案

我会设置在播放列表的事件监听器,并分派事件从可视数据一旦XML加载完毕。这样,你知道,当它完成加载,而无需使用ENTER_FRAME(将使用很多更多的CPU作为其检查每帧)。

 包中的类
{
    进口flash.events *。
    进口的flash.display.MovieClip;
    进口classes.VideoData;

    公共类播放列表扩展影片剪辑
    {
       私人VAR VDATA:可视数据;

       公共职能播放列表()
       {
           VDATA =新的可视数据();
           vData.addEventListener(引发Event.COMPLETE,onXMLCompleteHandler);
       }

       私有函数onXMLCompleteHandler(五:事件):无效
       {
           vData.removeEventListener(引发Event.COMPLETE,onXMLCompleteHandler);
           跟踪(vData.getXML());
       }
    }
}
 
第2章 理解面向对象

 包中的类
{
    进口flash.net.URLLoader;
    进口flash.net.URLRequest;
    进口对象类型:flash.events.Event;
    进口的flash.display.MovieClip;

    公共类可视数据扩展影片剪辑
    {
       私人VAR与myXML:XML;
       私人VAR myXMList:XMLList中;
       私人VAR myXMLLoader:的URLLoader;

       公共职能可视数据()
       {
          myXMLLoader =新的URLLoader();
          myXMLLoader.load(新的URLRequest(playlist.xml));
          myXMLLoader.addEventListener(引发Event.COMPLETE,的processXML);
       }

       私有函数的processXML(五:事件):无效
       {
           myXMLLoader.removeEventListener(引发Event.COMPLETE,的processXML);
           与myXML =新的XML(e.target.data);
           myXMList =新的XMLList(myXML.children());
           则dispatchEvent(E);
       }

       公共职能的getXML():XML
       {
           返回与myXML;
       }
    }
}
 

您也应该总是利用你的类名可视数据而不是可视数据

How can I get some var / data from a custom classes?

The XML class

package classes
{
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.events.Event;
    import flash.display.MovieClip;

    public class videoData extends MovieClip
    {   
       private var myXML:XML;
       private var myXMList:XMLList;

       public function videoData()
       {
          var myXMLLoader:URLLoader = new URLLoader();
          myXMLLoader.load(new URLRequest("playlist.xml"));
          myXMLLoader.addEventListener(Event.COMPLETE, processXML);
       }

       private function processXML(e:Event):void
       {
          myXML = new XML(e.target.data);
          myXMList = new XMLList(myXML.children());
       }

       public function getXML()
       {
          return myXML;
       }
    }
}

The class that is calling the XML

package classes
{
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    import classes.videoData;

    public class playList extends MovieClip
    {
       private var vData:videoData = new videoData();

       public function playList()
       {
          trace(vData.getXML())
       }
    }
}

解决方案

I would setup an event listener in 'playList' and dispatch an Event from 'videoData' once the XML has finished loading. That way you know when it's finished loading without using ENTER_FRAME (which will use alot more CPU as its checking every frame).

package classes
{
    import flash.events.*;
    import flash.display.MovieClip;
    import classes.VideoData;

    public class PlayList extends MovieClip
    {
       private var vData:VideoData;

       public function PlayList()
       {
           vData = new VideoData();
           vData.addEventListener(Event.COMPLETE, onXMLCompleteHandler);
       }

       private function onXMLCompleteHandler(e:Event):void
       {
           vData.removeEventListener(Event.COMPLETE, onXMLCompleteHandler);
           trace(vData.getXML());
       }
    }
}

package classes
{
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.events.Event;
    import flash.display.MovieClip;

    public class VideoData extends MovieClip
    {   
       private var myXML:XML;
       private var myXMList:XMLList;
       private var myXMLLoader:URLLoader;

       public function VideoData()
       {
          myXMLLoader = new URLLoader();
          myXMLLoader.load(new URLRequest("playlist.xml"));
          myXMLLoader.addEventListener(Event.COMPLETE, processXML);
       }

       private function processXML(e:Event):void
       {
           myXMLLoader.removeEventListener(Event.COMPLETE, processXML);
           myXML = new XML(e.target.data);
           myXMList = new XMLList(myXML.children());
           dispatchEvent(e);
       }

       public function getXML():XML
       {
           return myXML;
       }
    }
}

You should also ALWAYS capitalise your class names 'VideoData' not 'videoData'

 
精彩推荐