如何在AS3中修改循环内部子项的位置

时间:2010-03-03 09:30:51

标签: actionscript-3 loops for-loop

我正在尝试从xml创建动态图库。从我的教程,现在我已经得到它所以它会不断地将下一个缩略图添加到另一个下面,这很好,但我想弄清楚如何使它一旦达到某个y坐标,就会移动x坐标并再次堆叠它们。所以,相当一个长长的拇指列表,它将是一个并排堆栈。出于某种原因,我无法理解这样的事情是如何起作用的。我的目标是有一个并排的堆栈,我最终将放入一个将被屏蔽的影片剪辑,一次只显示2个堆栈。然后单击按钮将其滑过。我打算用“movieclip.length”来计算移动它的距离,但我还没有那么远。这就是我得到的:

var gallery_xml:XML;
var xmlReq:URLRequest = new URLRequest("xml/content.xml");
var xmlLoader:URLLoader = new URLLoader();
var imageLoader:Loader;

function xmlLoaded(event:Event):void
{
gallery_xml = new XML(xmlLoader.data);
info_txt.text = gallery_xml.screenshots.image[0].attribute("thumb");
for(var i:int = 0; i < gallery_xml.screenshots.image.length(); i++)
{
imageLoader = new Loader();
imageLoader.load(new URLRequest(gallery_xml.screenshots.image[i].attribute("thumb")));
imageLoader.x = 0;
imageLoader.y = i * 70 + 25;
imageLoader.name = gallery_xml.screenshots.image[i].attribute("src");
addChild(imageLoader);
imageLoader.addEventListener(MouseEvent.CLICK, showPicture);
}

}

xmlLoader.load(xmlReq);
xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
function showPicture(event:MouseEvent):void
{
imageLoader = new Loader();
imageLoader.load(new URLRequest(event.target.name));
imageLoader.x = 200;
imageLoader.y = 25;
addChild(imageLoader);
}

我似乎无法绕过我可以做的事情来动态地移动事物而不必为每组位置编写自定义..我感觉我完全忘记了如何做代数。

1 个答案:

答案 0 :(得分:1)

我建议使用以下两种解决方案之一(未经测试):

var next_x:Number = 0.0;
var next_y:Number = 25.0;
for (var i:int = 0; i < gallery_xml.screenshots.image.length(); ++i)
{
    // ...
    imageLoader.y = next_y;
    imageLoader.x = next_x;

    next_y += 70;
    if (next_y > THRESHOLD)
    {
        next_x += X_OFFSET;
        next_y = 25.0;
    }
}

也就是说,只需跟踪下一张图像的放置位置,并在超过阈值时相应地调整该坐标。如果您想使用i变量,则必须计算图像所在的行和列:

for (var i:int = 0; i < gallery_xml.screenshots.image.length(); ++i)
{
    // ...
    var row:int = i % MAX_ITEMS_PER_COLUMN;
    var column:int = i / MAX_ITEMS_PER_COLUMN;
    imageLoader.y = 25 + row * 70;
    imageLoader.x = column * COLUMN_WIDTH;
}