关于Loader

      我的日志 2008-6-27 18:45
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
标签集:TAGS:AS3 flash loader bug
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}