在flash8 帮助文件中有这样一段示例:
import flash.filters.GlowFilter;
var mclListener:Object = new Object();
mclListener.onLoadInit = function(target_mc:MovieClip) {
trace(target_mc._width);
target_mc._x = (Stage.width - target_mc._width) / 2;
target_mc._y = (Stage.height - target_mc._height) / 2;
var glow:GlowFilter = new GlowFilter();
target_mc.filters = [glow];
};
this.createEmptyMovieClip("img_mc",10);
var img_mcl:MovieClipLoader = new MovieClipLoader();
img_mcl.addListener(mclListener);
img_mcl.loadClip("myPIC.png",img_mc); //myPIC.png 是和fla 文件同一目录中的图片
以前一直有这样一个问题很困扰我:就是用MC的loadMovie加载进来的图片没办法知道真实的尺寸。比如用下面的代码加载图片,输出的结果始终是0。
_root.createEmptyMovieClip("img_mc",0);
img_mc.loadMovie("myPIC.png");
trace( img_mc._width );
MovieClipLoader 似乎智能了很多,利用它的onLoadInit 事件参数,就可以获取图片的尺寸了,而且是得来全不费功夫,难怪网上这个问题没人提,也没人说,但困扰了我确实很久,所以在这里记下来。
发光滤镜的使用是比较简单的,不使用任何参数的情况下,它会给图片周围加上一圈红色光晕。应用滤镜时,滤镜对象要写在数组中,形式如 [glow],想必这是为了方便应用多个滤镜所设计的。
var glow:GlowFilter = new GlowFilter();
target_mc.filters = [glow];
png 格式的图片在应用发光滤镜时,系统会自动忽略掉透明的部分,但是其它的如bmp、jpg 格式的图片就没这么好的待遇,所以如果是追求效果,把图片先转换一下,处理好边缘的空白,再来用滤镜,效果会比较好。
AS3 中 MovieClipLoader 和 LoadVars 类已经被 Loader 和 URLLoader 类取代。
加载图片,并加上滤镜效果,代码如下:
import flash.filters.GlowFilter;
var ldr:Loader = new Loader();
var url:String = "19.png";
var urlReq:URLRequest = new URLRequest(url);
ldr.load(urlReq);
addChild(ldr);
var glow:GlowFilter = new GlowFilter();
ldr.filters = [glow];
AS3 中的加载要求的比较细了,就好比以前是直接到厨房里去拿吃的,现在必须先填单子,写下菜名(url:String) ,定义好你的吃法(urlReq:URLRequest ),然后让服务员给你传菜(ldr.load(urlReq); ),之后,要想看清楚你点的东西,你得把它放到桌子上去(addChild(ldr); )。操作环节分得细了,不论哪个环节出问题都可以很快的被发现,这就是规范化带来的好处。
Loader 类的继承关系这样的:
Loader DisplayObjectContainer InteractiveObject DisplayObject EventDispatcher Object
所以它是和MC一样具有可视的属性,就当它是个MC直接应用滤镜即可,当然,也得像MC一样通过 addChild 添加到场景中。
如果想知道图片的尺寸,用借用contentLoaderInfo 类的力量,在加载之前加上这些代码:
function initHandler(event:Event):void {
var loader:Loader = Loader(event.target.loader);
var info:LoaderInfo = LoaderInfo(loader.contentLoaderInfo);
trace("initHandler: loaderURL=" + info.loaderURL + " url=" + info.url);
trace( info.width,info.height);
}
function ioErrorHandler(event:IOErrorEvent):void {
trace("ioErrorHandler: " + event);
}
ldr.contentLoaderInfo.addEventListener(Event.INIT, initHandler);
ldr.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
终于知道图片的大小了,还有其它的信息。