我目前正在使用以下函数来加载图像,但我找不到找到加载图像宽度的方法,我想在使用相同函数放置下一个图像之前使用它。
请注意,q是一个变量(数字),用于加载不同的图像。
= X我需要帮助获得加载的图像宽度......
function LoadImage(q)
{
var imageLoader:Loader = new Loader();
var image:URLRequest = new URLRequest("GalleryImages/Album1/"+q+".jpg");
imageLoader.load(image);
addChild (imageLoader);
imageLoader.x = 0 + CurrentXLength;
imageLoader.y = 0;
imageLoader.name = "image"+q;
trace(imageLoader.x)
}
答案 0 :(得分:12)
在实际加载之前,您无法知道位图的宽度:
function LoadImage(q)
{
var imageLoader:Loader = new Loader();
var image:URLRequest = new URLRequest("GalleryImages/Album1/"+q+".jpg");
imageLoader.contentLoader.addEventListener(Event.COMPLETE, ImageLoaded);
imageLoader.load(image);
addChild (imageLoader);
...
private function ImageLoaded(e:Event):void
{
var imageLoader:Loader = Loader(e.target.loader);
var bm:Bitmap = Bitmap(imageLoader.content);
var CurrentXLength = bm.width;
....
Alternativly this link可能会有帮助吗?我自己没试过......
答案 1 :(得分:2)
我刚刚询问了loader对象的de width属性:
var loader:Loader;
function loadImage(dir:String):void {
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, placeImage);
var urlReq:URLRequest = new URLRequest(direccion);
loader.load(urlReq);
}
function placeImage(o:Event):void {
loader.x = (1360 - loader.width)/2;
loader.y = (768 - loader.height)/2;
addChild(loader);
}
其中1360和768是画布尺寸......
答案 2 :(得分:1)
要访问宽度,必须在分配用于处理Event.COMPLETE的函数中执行此操作。
“你需要一个包含你想要加载的项目的数组。你应该用XML加载这些数据,这样它就是动态的和可扩展的。一旦加载了xml数据,它应该以任何方式分配给一个数组在这种情况下我们必须使用数组,而不仅仅是使用XML对象(本质上是一个数组)的原因是因为你需要知道一个对象的宽度,这样你就可以将下一个对象的X位置放在最后一个对象X位置加上它的WIDTH。
使用XML通常使用for循环并且只需迭代“x”次。在这种情况下,我们不希望这样。要获取已加载资源的“WIDTH”属性,必须在加载器触发Event.COMPLETE时从分配给fire的函数中访问它。图像完成后,它将从数组中删除项目,设置一个变量,指向lastX和lastWidth,然后获取数组中的下一个项目并从头开始。最后,数组为空,过程完成。
注意:我将跳过加载XML并自己将数据注入数组。
package
{
import flash.display.Sprite;
import flash.display.Loader;
import flash.net.URLRequest;
public class DocumentClass extends Sprite
{
private var _array:Array;
private var _lastX:Number;
private var _lastWidth:Number;
public function DocumentClass():void
{
_array = new Array();
//Add Items to an array however you wish. I did it
//this way to make it easier to read on this site.
_array.push({name: "image1", path: "path/to/image1"});
_array.push({name: "image2", path: "path/to/image2"});
_array.push({name: "image3", path: "path/to/image3"});
loadImage();
}
private function loadImage():void
{
if(_array.length > 0)
{
var loader:Loader = new Loader();
addChild(loader);
var request:URLRequest = new URLRequest(_array[0].path); //Loads first item in the array each time.
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);
loader.x = _lastX + _lastWidth;
laoder.load(request);
_lastX = loader.x; //We set after so we are ready for the next.
_array.shift(); //Remove the first item from the array.
}
}
function onImageLoaded(e:Event):void
{
_lastWidth = e.target.width;
loadImage(); //Attempt to load another image if the array isn't empty.
}
}
}
我希望这会有所帮助,代码未经过测试,但概念似乎有效。
答案 3 :(得分:0)
是的,我使用了scott的答案,但值得注意的是'imageLoader.contentLoader'应该是LoadImage()函数中的'imageLoader.contentLoaderInfo'。为我解决了宽度问题 - 谢谢你们。