Path 在DocumentClass之外引用movieclip

Path 在DocumentClass之外引用movieclip,path,movieclip,Path,Movieclip,我有一个非常简单的ImageLoader类: package { // import flash.display.MovieClip; import flash.events.Event; import flash.events.ProgressEvent; import flash.net.URLRequest; import flash.display.Loader; // public class ImageLoader e

我有一个非常简单的ImageLoader类:

package 
{
    //
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.ProgressEvent;
    import flash.net.URLRequest;
    import flash.display.Loader;
    //
    public class ImageLoader extends MovieClip
    {
        var imageLoader:Loader;
        public function ImageLoader(img:String)
        {
            loadAsset(img);
        }
        //
        function loadAsset(url:String):void
        {
                    //warning here
            preloader.visible = true;
            imageLoader = new Loader();
            imageLoader.load(new URLRequest(url));
            imageLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, imageLoading);
            imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);
        }
        //;
        function imageLoaded(evt:Event):void
        {
                    //warning here
            imageLoaderClip.addChild(imageLoader);
            preloader.visible = false;
        }
        //
        function imageLoading(evt:ProgressEvent):void
        {
            var loaded:Number = evt.bytesLoaded / evt.bytesTotal;
            updateProgress(loaded);
        }
        //
        function updateProgress(value:Number)
        {
            preloader.progress.width = value * preloader.bar.width;
        }
    }
}
如果这是DocumentClass,那么这将非常有效。 但是,如果DocumentClass是这样的:

package  {
    import flash.display.MovieClip;
    public class LoadTest extends MovieClip {

        public function LoadTest() {
            var img = new ImageLoader("DSC04550.JPG");
        }
    }
}
这已经不起作用了,因为舞台电影剪辑“预加载器”和“图像加载器剪辑”的存在


哪一种是使事情顺利进行的最佳方式?我想将ImageLoader类的引用作为参数传递。在处理这种情况时,还有其他(更好的)方法吗?

是的,请查看GreenSock的LoaderMax。这将使您的项目变得更容易一个数量级:


这很有趣,谢谢,但我一直在寻找处理我所描述的情况(常见做法等)的方法。从外观上看,您的舞台上有一个名为“预加载程序”的对象实例。因此,当document类设置为ImageLoader时,会自动设置对Preload的引用。当您将文档类设置为LoadTest时,您的ImageLoader实例(img)不再具有对预加载程序的引用,而且您从未将img添加到显示列表中。解决方案是将预加载程序对象包装为ImageLoader的一部分(以便它具有对它的本地引用),然后将ImageLoader实例添加到显示列表中,或者将对文档显示列表的引用传递给其构造函数。前者会被推荐。好吧,我在问之前就明白了。我想知道哪种方法是克服这一限制的常用方法(可能将两个movieclip作为ImageLoader?pass stage?的参数传递)。一般来说,在面向对象的编程中,任何给定对象都应该尽可能少地了解其周围环境,以最大限度地提高可移植性和减少冗余,为了便于重用。通过这种推理,您应该在图像加载器中实例化预加载显示对象(因为图像加载器本身是一个显示对象,与其命名相反)。即使您不使用它,也值得查看GreenSock LoaderMax的源代码,因为这是资产加载和通用代码设计模块化方法的典型示例。