Как изменить положение дочерних элементов внутри цикла в AS3 - PullRequest
0 голосов
/ 03 марта 2010

Я пытаюсь создать динамическую галерею изображений из и XML. Из моих уроков, прямо сейчас я получил его, поэтому он будет постоянно добавлять следующий эскиз под другим, что нормально, но я пытаюсь выяснить, как сделать так, чтобы, как только он достигнет определенной координаты y, он будет переместите координату х и сложите их снова. Так что достаточно одного длинного списка превью, это будет бок о бок стек. По какой-то причине я не могу понять, как это будет работать. Моя цель состоит в том, чтобы иметь бок о бок стек, который я в конечном итоге вставлю в видеоклип, который будет замаскирован так, чтобы показывать только 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 Ответ

1 голос
/ 03 марта 2010

Я бы предложил одно из следующих двух решений (не проверено):

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...