【问题标题】:Flash AS3 - AddChild outside of sprite rangeFlash AS3 - AddChild 超出精灵范围
【发布时间】:2011-10-15 14:51:09
【问题描述】:

我正在尝试在 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;

}   

【问题讨论】:

  • 你有一些代码可以分享吗?
  • 您的滚动条代码可能已经设置了一些用于计算滚动距离的属性,而不是不断地从列表中读取它们。当您的列表发生变化时,它们将需要更新,但如果没有看到代码,就不可能说更多。

标签: flash actionscript-3 scrollbar


【解决方案1】:

如果你使用标准 UIScrollbar 组件,它有一个内置函数scrollBar.update(); 你应该在改变内容大小后使用这个函数。

【讨论】:

  • 我正在使用列表中的对象,所以我认为 UIScrollBar 组件不会起作用。我认为它仅适用于文本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多