我正嘗試在Flash AS3中創建一個動態滾動列表。當我創建一個列表時,我將它設置爲初始長度。稍後,我將更多的對象添加到列表的原始大小之外的列表中。我希望能夠向下滾動列表並查看所有對象。Flash AS3 - Sprite範圍外的AddChild
我的滾動條只是移動列表的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)
}
我也有滾動條中的更新函數,當拖動scrollface時使用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;
}
你有一些你可以分享的代碼嗎? – Corey
您的滾動條代碼可能會設置一些用來計算滾動距離的屬性,而不是不斷地從列表中讀取它們。當你的列表發生變化時,他們需要更新,但是如果沒有看到代碼就不可能說更多。 – shanethehat