如何在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;
}
答案 0 :(得分:4)
在Event.COMPLETE的监听器中是这样做的方式,因此如果没有触发该事件,则加载器代码中必定存在错误。我注意到你似乎在你发布的代码的顶部创建了一个局部变量“poster”但是没有在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;
}
答案 1 :(得分:1)
图片是否与您的SWF不同?如果是这样,并且您的Event.COMPLETE侦听器不起作用,则可能是由于安全性异常。具有该文件的服务器必须具有允许访问您的swf托管的域的crossdomain.xml策略文件,否则您将无法直接操作加载的图像的大小,如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。
答案 2 :(得分:0)
向所有负载添加IOErrorEvent侦听器通常是个好主意。如果有问题,那么这将告诉您:
this.poster.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
function errorHandler(e:IOErrorEvent):void {
trace("Error on load: " + e);
}
如果加载过程出现问题,您就可以抓住它了。