Path 在DocumentClass之外引用movieclip
我有一个非常简单的ImageLoader类: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
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的源代码,因为这是资产加载和通用代码设计模块化方法的典型示例。