Flash AS3 - AddChild вне диапазона спрайтов - PullRequest
0 голосов
/ 29 июля 2011

Я пытаюсь создать динамический список прокрутки во Flash AS3. Когда я создаю список, я устанавливаю его начальную длину. Позже я добавляю больше объектов в список, который находится за пределами исходного размера списка. Я хочу иметь возможность прокручивать список вниз и видеть все объекты.

Моя полоса прокрутки просто перемещает позицию y списка. Однако каждый объект, который рисуется за пределами исходного размера списка, не отображается, когда я запускаю программу и прокручиваю. Как я могу это исправить?

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

public function AddPlayers(pPlayers:Array, pScrollBar:ScrollBar):void
{
        var player:Player;

        trace("happened again");
        for (var i:int = 0; i < pPlayers.length; i++)
        {               
            player = pPlayers[i];                               
            this.addChild(player);
            player.x = 0;
            player.y = player.height * i;
        }

        pScrollBar.InitializeScrollBar(this);       
}

Функция InitializeScrollBar обновляет свойства полосы прокрутки в зависимости от размера добавленного содержимого. В основном это изменение размера лица прокрутки в зависимости от размера содержимого списка.

public function InitializeScrollBar(pList:List)
{
        this.list = pList;

        // Size and place scroll track
        scrollTrack.height = scrollHeight - 2 * scrollUp.height;
        scrollTrack.y = scrollUp.height;            
        addChild(scrollTrack);          

        // Place scroll face
        scrollFace.y = scrollUp.height;
        scrollFace.height = scrollTrack.height * (scrollHeight / list.height);          
        addChild(scrollFace);

        // Place scroll buttons
        addChild(scrollUp);
        scrollDown.y = scrollDown.height + scrollTrack.y + scrollTrack.height;
        addChild(scrollDown);
        scrollDown.scaleY = -1;


        scrollFace.addEventListener(MouseEvent.MOUSE_DOWN, MoveScrollFace);

        scrollDown.addEventListener(MouseEvent.CLICK, MoveDown)
        scrollUp.addEventListener(MouseEvent.CLICK, MoveUp)
}

У меня также есть функция обновления на полосе прокрутки, которая использует событие ENTER FRAME при перетаскивании скролла.

private function Update(evt:Event)
{
        trace(mouseY);
        scrollFace.y = mouseY;

        if (scrollFace.y <= scrollTrack.y)
        {
            scrollFace.y = scrollTrack.y;
        }
        else if (scrollFace.y + scrollFace.height >= scrollTrack.y + scrollTrack.height)
        {
            scrollFace.y = scrollTrack.y + scrollTrack.height - scrollFace.height;
        }

        var scrollChange:Number = (list.height - scrollHeight)/(scrollTrack.height - scrollFace.height);
        list.y = -1 * scrollChange * (scrollFace.y - scrollUp.height);          
        list.y = list.y + list.y % 25;

}   

1 Ответ

0 голосов
/ 29 июля 2011

Если вы используете стандартный компонент UIScrollbar, он имеет встроенную функцию scrollBar.update(); Эту функцию следует использовать после изменения размера содержимого.

...