2

我试图弄清楚如何引用目标的类。这是一些代码:

xmlDoc = new XML(xmlLoader.data);
//trace(xmlDoc.Video[1].Desc);
for (var i:int = 0; i < xmlDoc.Video.length(); i++)
{
    xmlObj = new FilmVideo(xmlDoc.Video[i].Name, xmlDoc.Video[i].title, xmlDoc.Video[i].Thumb, xmlDoc.Video[i].URL, xmlDoc.Video[i].APILoader);

    XMLItem[i] = xmlObj;
    //trace(XMLItem);
    MovieClip(root).main_mc.thumb_mc.addChild(XMLItem[i]);
    if (i <= 0) {
        XMLItem[i].x = 20;
        XMLItem[i].y = 0;
    } else if (i > 0){

        XMLItem[i].x = XMLItem[i-1].x + XMLItem[i-1].width + 120;
        XMLItem[i].y = 0;

    }
        XMLItem[i].addEventListener(MouseEvent.CLICK, makeThumbClick);
        XMLItem[i].addEventListener(MouseEvent.MOUSE_OVER, makeThumbRollOver);
        XMLItem[i].addEventListener(MouseEvent.ROLL_OUT, makeThumbRollOut);



}

}

function makeThumbClick(e:MouseEvent)
{
//var myFilmVideo:FilmVideo = FilmVideo(e.target);
MovieClip(root).main_mc.play();
trace(FilmVideo(e.target));
/MovieClip(root).main_mc.theater_mc.videoLoader(FilmVideo(e.target)._APILoad, FilmVideo(e.target)._videoURL);
}

XMLItem 是一个数组,用于存储我定制的类对象(类名是基于movieclip 的FilmVideo)。_thumbToMC 是我的自定义类中的一个方法,它返回一个影片剪辑。该类具有存储在其属性中的信息,我想通过在 makeThumbClick 函数中调用的函数传递。但是,我不知道如何。e.target 引用 _thumbToMC 影片剪辑而不是类。我要参考班级吗?先感谢您 :)

这是课程:

package filmvideo
{
import flash.display.Loader;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.net.URLRequest;

public class FilmVideo extends MovieClip
{
    public var _nameXML:String = "";
    public var _title:String = "";
    public var _thumbURL:URLRequest;
    public var _videoURL:URLRequest;
    public var _APILoad:String = "";

    public var loader:Loader = new Loader();

    public function FilmVideo(name:String, title:String, thumbURL:String, videoURL:String, APILoad:String)
    {

        _nameXML = name;
        _title = title;
        _thumbURL = new URLRequest(thumbURL);
        _videoURL = new URLRequest(videoURL);
        _APILoad = APILoad;

        //trace(_name);
        //trace(_title);
        //trace(thumbURL);
        //trace(videoURL);
        //trace(_APILoad);

        this.addChild(loader);
        loader.load(_thumbURL); 

    }
}
}
4

2 回答 2

0

我不是 100% 确定我理解了这个问题,但是假设您要检索 FilmVideo 实例的属性(用户正在点击它),那么也许这就是您要查找的内容;

function makeThumbClick(e:MouseEvent){

    var myFilmVideo:FilmVideo = FilmVideo(e.target);

    // access properties of _thumbToMC
    myFilmVideo.randomproperty = 123;

}
于 2013-07-21T23:18:06.207 回答
0

您可以将您的课程简化为:

package filmvideo
{
import flash.display.Loader;
import flash.display.MovieClip;
import flash.net.URLRequest;

public class FilmVideo extends MovieClip
{
    public var _nameXML:String = "";
    public var _title:String = "";
    public var _thumbURL:URLRequest;
    public var _videoURL:URLRequest;
    public var _APILoad:String = "";

    public var loader:Loader = new Loader();

    public function FilmVideo(name:String, title:String, thumbURL:String, videoURL:String, APILoad:String)
    {

        _nameXML = name;
        _title = title;
        _thumbURL = new URLRequest(thumbURL);
        _videoURL = new URLRequest(videoURL);
        _APILoad = APILoad;

        //trace(_name);
        //trace(_title);
        //trace(thumbURL);
        //trace(videoURL);
        //trace(_APILoad);

        this.addChild(loader);
        loader.load(_thumbURL); 
    }
}
}

然后您可以将 FilmVideo 用作 MovieClip(因为它扩展了 MovieClip 类)。

并使用'currentTarget'而不是'target',因为它总是指向监听的对象,而'target'指向触发事件的对象。更多信息在这里

xmlDoc = new XML(xmlLoader.data);
//trace(xmlDoc.Video[1].Desc);
for (var i:int = 0; i < xmlDoc.Video.length(); i++)
{
    xmlObj = new FilmVideo(xmlDoc.Video[i].Name, xmlDoc.Video[i].title, xmlDoc.Video[i].Thumb, xmlDoc.Video[i].URL, xmlDoc.Video[i].APILoader);

    XMLItem[i] = xmlObj;
    //trace(XMLItem);
    Object(root).main_mc.thumb_mc.addChild(XMLItem[i]);
    if (i <= 0) {
        XMLItem[i].x = 20;
        XMLItem[i].y = 0;
    } else if (i > 0){

        XMLItem[i].x = XMLItem[i-1].x + XMLItem[i-1].width + 120;
        trace(XMLItem[i].width);
        XMLItem[i].y = 0;

    }
        XMLItem[i].addEventListener(MouseEvent.CLICK, makeThumbClick);
        XMLItem[i].addEventListener(MouseEvent.MOUSE_OVER, makeThumbRollOver);
        XMLItem[i].addEventListener(MouseEvent.ROLL_OUT, makeThumbRollOut);
}

function makeThumbClick(e:MouseEvent)
{
    //var myFilmVideo:FilmVideo = FilmVideo(e.target);
    MovieClip(root).main_mc.play();
    trace(myFilmVideo._APILoad);
    MovieClip(root).main_mc.theater_mc.videoLoader(FilmVideo(e.currentTarget)._APILoad, FilmVideo(e.currentTarget)._videoURL); 
}

如果你不想这样做

添加对 _thumbToMC 的引用(在类内)返回到它的 FilmVideo 对象。

_thumbMC._filmVideo = this;

然后:

function makeThumbClick(e:MouseEvent)
{
    //var myFilmVideo:FilmVideo = FilmVideo(e.target);
    MovieClip(root).main_mc.play();
    MovieClip(root).main_mc.theater_mc.videoLoader(MovieClip(e.currentTarget)._filmVideo._APILoad, MovieClip(e.currentTarget)._filmVideo._videoURL);
}
于 2013-07-21T23:37:01.583 回答