2011-04-11 71 views
0

如何在Flash中设置加载图像的宽度和高度?请求后立即设置尺寸不起作用。宽度和高度保持为零。在Flash中设置加载图像的尺寸

var poster:Loader = new Loader(); 
Stage.addChild(poster); 
poster.load(new URLRequest('http://example.com/image.jpg')); 
poster.width = 320; 
poster.height = 240; 
trace(poster.width); // 0 
trace(poster.height); // 0 

如果我稍等片刻,然后设置尺寸,它将工作。

我尝试在调整大小之前听一些教程中提到的Event.INIT事件和Event.COMPLETE事件。这两件事都没有被触发。

public function theClass() { 
    this.poster = new Loader(); 
    this.poster.contentLoaderInfo.addEventListener(Event.INIT, this.imageLoaded); 
    this.poster.contentLoaderInfo.addEventListener(Event.COMPLETE, this.imageLoaded); 
    Stage.addChild(this.poster); 
    this.poster.load(new URLRequest('http://example.com/image.jpg')); 
} 

private function imageLoaded(event:Event):void { 
    trace('image is loaded'); 
    this.poster.width = 320; 
    this.poster.height = 240; 
} 

回答

4

在侦听Event.COMPLETE是做到这一点的方式,因此,如果没有被触发的事件,必须有一些错误的装载程序。我注意到你似乎在你发布的代码的顶部创建了一个局部变量“海报”,但不要在theClass()中声明它,但我不知道这是否会导致你的问题。

此外,通常你等到图像完成加载之后再添加它,但是我不知道是否会导致你的问题。

我的意思是,我只是写了下面的代码作为最小的测试,它工作正常:

public function Main():void { 
    var loader:Loader = new Loader(); 
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); 
    loader.load(new URLRequest("image.png")); 
} 
private function onComplete(e:Event):void { 
    var img:Bitmap = Bitmap(e.target.content); 
    this.addChild(img); 
    img.width = 100; 
    img.height = 100; 
} 
+0

也许您应该在您的答案中添加设置尺寸的部分? – Taurayi 2011-04-11 23:25:26

+0

我不敢相信我没有想到要那样做。它只是在onComplete函数中设置e.target.content,我现在就这样做。 – jhocking 2011-04-12 01:40:44

+0

我知道,似乎我一直在挑剔你的答案,但如果我不得不提出最后一件事情,那么可能是在事件处理程序内部将'e.target'对象存储在局部变量中。就像'var loader:Loader = Loader(e.target);'然后将'loader.content'对象的位图存储在一个局部变量中,比如'var bitmap:Bitmap = Bitmap(loader.content);',之后你可以简单地做'bitmap.width = 100; bitmap.height = 100;'。不要误会我的意思你的答案已经正确了,只是将事件目标对象存储在本地变量中是一个常见的约定。 – Taurayi 2011-04-12 11:28:23

0

它通常是一个好主意,一个IOErrorEvent监听器添加到所有负载。如果有问题,那么这会告诉你:

this.poster.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorHandler); 

function errorHandler(e:IOErrorEvent):void { 
trace("Error on load: " + e); 
} 

如果在加载过程中有问题,这就是你如何捕获它。

1

图像是否在与swf不同的域上?如果是这样,并且您的Event.COMPLETE侦听器不工作,则可能是由于安全异常。带有该文件的服务器必须具有一个crossdomain.xml策略文件,该文件允许访问您的swf托管的域,否则您将无法直接操作加载图像的大小,如jhocking示例中所示。

如果您知道托管映像的服务器上有一个策略文件(通过访问http://site.com/crossdomain.xml并看到它允许您的域或通配符涵盖您的域),请为您的加载程序创建loaderContext以使用该集checkPolicyFile标志为true:

var context:LoaderContext = new LoaderContext(); 
context.checkPolicyFile = true; 
this.poster.load(new URLRequest('http://site.com/image.jpg'),context); 

在您的onComplete处理程序中,选中Loader。 childAllowsParent查看您是否可以访问加载器内容。如果是这样,请设置loader.content.width和loader.content.height。