Как изменить положение детей внутри цикла в AS3

Я пытаюсь создать динамическую галерею изображений из 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);
}

Кажется, я не могу понять, что я могу сделать для динамического перемещения вещей без необходимости писать пользовательский if для каждого набора позиций. У меня такое чувство, что я полностью забыл, как делать алгебру.


person Ghost9    schedule 03.03.2010    source источник


Ответы (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;
}
person TC.    schedule 03.03.2010
comment
imageLoader.x = Math.floor(столбец) * COLUMN_WIDTH; В противном случае ваша колонка пойдет по диагонали. - person Brent; 04.03.2010
comment
строка и столбец являются целыми числами, поэтому они не нуждаются в напольном покрытии - person TC.; 04.03.2010