我如何从一个自定义类得到一些无功/数据?
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());
}
}
}
包中的类
{
进口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'
下一篇:如何访问数组元素数组、元素