flash如何控制外部加载的图片大小的解决方法

来源:互联网 发布:身份证住宿登记软件 编辑:程序博客网 时间:2024/05/16 08:53

 

很多人出现flash加载外部图片而不能控制显示大小的问题,导致这样问题的原因其实是因为flash在加载图片是采用渐进式的方式,在图片没有加载完成的时候,flash是不知道你的图片的大小的和尺寸的属性的。所以你在程序中即时加入控制大小的代码也无法控制图片。因为代码往往在图片还没有加载完之前就执行了,也就是说你的代码是找不到执行的对象的。所以使用_width和_height代码是无效的。而_xscale和_yscale可以执行但是因为是按照百分比计算的,所以也不能控制不同大小的图片最后显示同样大小的尺寸。

解决办法:
loadClip代码,我想你应该也是知道的, loadClip代码就是解决这个问题的最佳人选了。loadMovie属于初级代码,它没有侦听器这样的属性,因此无法捕捉到文件的属性(大小,尺寸)。因此我们不推荐使用这个代码,如果你的flash只是用于本机播放的,不存在网络延迟那么也就无所谓的了,但是如果你要控制加载图片的大小,那么还是需要用loadClip即时你的flash是本地播放的,因为即时加载本地的图片,加载图片的时间肯定也是滞后于代码执行的,因此我们选用loadClip代码,作为加载外部文件的最佳代码。
我们看以下它侦听器的各项属性:(我这里就讲一个了)
onLoadInit
属性是用于检测文件状态属性的
这个属性非常的重要,因为它能告诉你图片的各项属性,也就是只有这个时候你才能知道文件的尺寸大小。你可以试一下trace(MC._width)是不是就是图片的大小。如果是,就证明图片已经加载完毕,并且你可以通过程序去控制它的大小了。
onLoadInit= function(target_mc:MovieClip){
       target_mc._width=100;
       target_mc._height=100;
}
看看是不是加载近来的图片就是100像素*100像素的显示了,你可以通过程序自由控制加载近来的图片大小了。

延伸代码,如何让你的图片可以宽是100像素而高是等比缩放的呢?
onLoadInit = function(target_mc:MovieClip){
       target_mc._height=(100*target_mc._height)/target_mc._width;
       target_mc._width=100;  
}
target_mc._height=(100*target_mc._height)/target_mc._width;
放在上面很重要的哦,千万不要这样放:
target_mc._width=100;
target_mc._height=(100*target_mc._height)/target_mc._width;
这样你的高肯定不是等比率的。

通过以上讲解是不是可以啦!

参考flash帮助文档,我弄了个简单的实验效果,大家可以直接复制粘贴

this.createEmptyMovieClip("image_mc", this.getNextHighestDepth());
var mclListener:Object = new Object();
mclListener.onLoadInit = function(target_mc:MovieClip) {
target_mc._width = 100;
target_mc._height = 100
};
var image_mcl:MovieClipLoader = new MovieClipLoader();
image_mcl.addListener(mclListener);
image_mcl.loadClip("http://www.helpexamples.com/flash/images/image1.jpg", image_mc);

可以测试代码效果