Flash AS3 - AddChild 超出精灵范围

Posted

技术标签:

【中文标题】Flash AS3 - AddChild 超出精灵范围【英文标题】:Flash AS3 - AddChild outside of sprite range 【发布时间】: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;

   

【问题讨论】:

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

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

【讨论】:

我正在使用列表中的对象,所以我认为 UIScrollBar 组件不会起作用。我认为它仅适用于文本。

以上是关于Flash AS3 - AddChild 超出精灵范围的主要内容,如果未能解决你的问题,请参考以下文章

如何在 flash(as3) 中检测实例来自哪个类

在 Flash as3 中移动敌人

Swift - SpriteKit:如果添加不同的“addchild”父母,使精灵相互反应

正确使用 addChild

Adobe Flash Builder (flex4):addChild() 在此类中不可用。

AS3.0中影片剪辑元件嵌套了个动态文本框,怎样才能在文本框上也能显示手型?