ActionScript有许多bug。
Loader这个类从设计上就有bug,有一篇文章说unload()这个方法在一些情况下无效。
这个问题存在肯定会有影响,但是我觉得不会那么严重,因为毕竟我们不会使用Loader去load一切东西,如果目标对象存在无法unload的元素,那么我们可以选择不去load。
但是我今天发现一个问题,我们load外部一个图片,需要把这个图片指定大小和放置在指定的位置。不废话,代码如下:
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
var l:Loader = new Loader()
l.width = 200;
l.height =200;
l.x = 100;
l.y = 100;
l.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
l.load( new URLRequest("pp.jpg") );
function onComplete(e:Event):void{
this.addChild( e.target.loader)
}
然后你会发现stage上什么都没有。
我今天就碰上这个问题,郁闷了一个下午,又是测试turlrequest,又是测试loader里有没有对象,最后仍然发现不了问题,太奇怪了。
后来直接把loader addChild,图片能够正常显示,问题发现——在l.width,l.height上
原来我们虽然可以读取Loader的height和width,并且可以得到正确的值,也可以修改,但是修改之后再addChild就什么都不能显示。
怎么解决这个问题呢?难道load进去的图片都不能修改大小了吗?当然不能这样,如果我连这个问题就解决不了,那么是对我技术上的侮辱。我就想,如果我用Bitmap画一个跟外部图片一样的Bitmap这样不就能修改大小了吗?于是代码如下:
import flash.display.Loader;
import flash.events.Event;
import flash.net.URLRequest;
import flash.display.Bitmap;
import flash.display.BitmapData;
var rq:URLRequest = new URLRequest("images/flv/2.jpg");
var l:Loader = new Loader();
l.contentLoaderInfo.addEventListener(Event.COMPLETE, onCom);
l.load(rq);
function onCom(e:Event):void{
//this.addChild(e.target.loader);
var l:Loader = e.target.loader;
var bit:BitmapData = new BitmapData(l.width,l.height);
bit.draw( l.content );
var b:Bitmap = new Bitmap(bit);
b.width = 200;
b.height = 200;
this.addChild(b);
}
果然成功修改了加载图片的大小,后来我又发现如果Loader.load()的是gif,png,jpg的话,那么Loader.content就是一个Bitmap对象。于是代码简化如下:
import flash.display.Loader;
import flash.events.Event;
import flash.net.URLRequest;
var rq:URLRequest = new URLRequest("images/flv/2.jpg");
var l:Loader = new Loader();
l.contentLoaderInfo.addEventListener(Event.COMPLETE, onCom);
l.load(rq);
function onCom(e:Event):void{
//this.addChild(e.target.loader);
var l:Loader = e.target.loader;
l.content.width = 200;
l.content.height = 200;
this.addChild(l);
}
哈哈,问题解决了。所以当Loader加载图片文件的时候,如果想修改图片的大小记住,一定要修改Loader.content的width和heigh。
Loader这个类从设计上就有bug,有一篇文章说unload()这个方法在一些情况下无效。
这个问题存在肯定会有影响,但是我觉得不会那么严重,因为毕竟我们不会使用Loader去load一切东西,如果目标对象存在无法unload的元素,那么我们可以选择不去load。
但是我今天发现一个问题,我们load外部一个图片,需要把这个图片指定大小和放置在指定的位置。不废话,代码如下:
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
var l:Loader = new Loader()
l.width = 200;
l.height =200;
l.x = 100;
l.y = 100;
l.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
l.load( new URLRequest("pp.jpg") );
function onComplete(e:Event):void{
this.addChild( e.target.loader)
}
然后你会发现stage上什么都没有。
我今天就碰上这个问题,郁闷了一个下午,又是测试turlrequest,又是测试loader里有没有对象,最后仍然发现不了问题,太奇怪了。
后来直接把loader addChild,图片能够正常显示,问题发现——在l.width,l.height上
原来我们虽然可以读取Loader的height和width,并且可以得到正确的值,也可以修改,但是修改之后再addChild就什么都不能显示。
怎么解决这个问题呢?难道load进去的图片都不能修改大小了吗?当然不能这样,如果我连这个问题就解决不了,那么是对我技术上的侮辱。我就想,如果我用Bitmap画一个跟外部图片一样的Bitmap这样不就能修改大小了吗?于是代码如下:
import flash.display.Loader;
import flash.events.Event;
import flash.net.URLRequest;
import flash.display.Bitmap;
import flash.display.BitmapData;
var rq:URLRequest = new URLRequest("images/flv/2.jpg");
var l:Loader = new Loader();
l.contentLoaderInfo.addEventListener(Event.COMPLETE, onCom);
l.load(rq);
function onCom(e:Event):void{
//this.addChild(e.target.loader);
var l:Loader = e.target.loader;
var bit:BitmapData = new BitmapData(l.width,l.height);
bit.draw( l.content );
var b:Bitmap = new Bitmap(bit);
b.width = 200;
b.height = 200;
this.addChild(b);
}
果然成功修改了加载图片的大小,后来我又发现如果Loader.load()的是gif,png,jpg的话,那么Loader.content就是一个Bitmap对象。于是代码简化如下:
import flash.display.Loader;
import flash.events.Event;
import flash.net.URLRequest;
var rq:URLRequest = new URLRequest("images/flv/2.jpg");
var l:Loader = new Loader();
l.contentLoaderInfo.addEventListener(Event.COMPLETE, onCom);
l.load(rq);
function onCom(e:Event):void{
//this.addChild(e.target.loader);
var l:Loader = e.target.loader;
l.content.width = 200;
l.content.height = 200;
this.addChild(l);
}
哈哈,问题解决了。所以当Loader加载图片文件的时候,如果想修改图片的大小记住,一定要修改Loader.content的width和heigh。
回复Comments
作者:
{commentrecontent}