我已经和它争吵了一段时间了,我正在将swf文件加载到一个持有者swf中,并希望将每个加载的swf放在另一个下方,并保持10px的余量。
这就是我到目前为止,它正确地提取所有数据现在只想定位加载的swfs。
非常感谢任何帮助。
import flash.display.LoaderInfo;
var swfLoader:Loader;
var xml:XML;
var xmlList:XMLList;
var xmlLoader:URLLoader = new URLLoader();
xmlLoader.load(new URLRequest("components.xml"));
xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
function xmlLoaded(event:Event):void
{
xml = XML(event.target.data);
xmlList = xml.children();
for (var i:int = 0; i < xmlList.length(); i++)
{
swfLoader = new Loader();
swfLoader.load(new URLRequest(xmlList[i].@SWFsource));
swfLoader.contentLoaderInfo.addEventListener(Event.INIT, loaderInitHandler);
addChild(swfLoader);
}
}
function loaderInitHandler(event:Event):void
{
var swfInfo:LoaderInfo = event.target as LoaderInfo;
//THIS IS WHERE I WANT TO POSITION MY LOADED SWF'S.
// I CAN TRACE THEIR HEIGHTS BUT NOT SURE HOW TO POSITION THEM IN Y
trace(swfLoader.y = swfInfo.height)
}
答案 0 :(得分:0)
使用swfLoader成员变量时会遇到麻烦:将每个加载器添加到舞台上,但swfLoader引用始终只指向一个对象(最后添加的对象)。
像这样定位剪辑也是有问题的,因为一次只能获得一个加载器引用,因此您将无法计算相对于其他加载器的位置。
如果除了加载器之外没有别的东西放在舞台上,你可以遍历主对象的子节点,但我强烈建议将剪辑存储在数组中。您的代码将如下所示:
var loaders:Array = []; // an Array of loaders instead of a single loader
var xml:XML;
var xmlList:XMLList;
var xmlLoader:URLLoader = new URLLoader();
xmlLoader.load(new URLRequest("components.xml"));
xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
function xmlLoaded(event:Event):void
{
xml = XML(event.target.data);
xmlList = xml.children();
for (var i:int = 0; i < xmlList.length(); i++)
{
var swfLoader:Loader = new Loader(); // local instead of member variable
swfLoader.load(new URLRequest(xmlList[i].@SWFsource));
swfLoader.contentLoaderInfo.addEventListener(Event.INIT, loaderInitHandler);
}
}
function loaderInitHandler(event:Event):void
{
var swfInfo:LoaderInfo = event.target as LoaderInfo;
var swfLoader:Loader = swfInfo.loader;
if (loaders.length > 0) {
var lastLoader : Loader = loaders[loaders.length-1];
swfLoader.y = lastLoader.y + lastLoader.height + 10; // positioning happens here
}
addChild(swfLoader);
loaders.push(swfLoader);
}
加载器只会在完全加载时添加到舞台并推送到阵列上,因此您可以确定lastLoader始终是放置在舞台上的最后一个项目。您可以稍后使用加载器数组删除或重新定位图像。