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