2011-07-29 58 views
0

我正嘗試在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; 

} 
+1

你有一些你可以分享的代碼嗎? – Corey

+0

您的滾動條代碼可能會設置一些用來計算滾動距離的屬性,而不是不斷地從列表中讀取它們。當你的列表發生變化時,他們需要更新,但是如果沒有看到代碼就不可能說更多。 – shanethehat

回答

0

如果使用標準UIScrollBar組件它在功能scrollBar.update();構建改變內容的大小後,您應該使用此功能。

+0

我在列表中使用對象,所以我不認爲UIScrollBar組件可以工作。我認爲這隻適用於文字。 – Sean