奇怪的Flex callLater x位置行为

时间:2010-02-25 23:00:58

标签: flex

我不确定这到底发生了什么,但我要做的是使用flex制作滚动滚动条,当屏幕上有其中一个时,它可以正常工作,但有两个时,奇怪的事发生了。

我设计这个用于实时更新的方式,当我的hbox的孩子离开屏幕时,我删除它并在其末尾添加另一个孩子。这恰好重置了hbox的X位置,这不是太糟糕,但它也会重置我在屏幕上的任何其他hbox的X位置。这是代码,演示了我所看到的内容:

要使用此功能,请运行flex程序,然后在第一个hbox中单击以将其x位置设置为mouseX。当重置第二个hbox(hbox3)的x位置时,第一个hbox(hbox2)X位置也将重置。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application creationComplete="addToBoxes()" xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" >
    <mx:Script>
        <![CDATA[
            import mx.controls.Button;
            private const speed:Number = 1;

            private function moveBox3():void{
                box3.move(box3.x + speed, box3.y)
                if(Math.random() > .99 && box3.numChildren > 0)
                    box3.removeChildAt(0)
                callLater(moveBox3) 
            }
            private function addToBoxes():void{
                for(var i:int = 0; i < 8; i++){
                    var a:Button = new Button;
                    box2.addChild(a);
                    a.label = "Box2:" + String(i)
                }
                for(var j:int = 0; j < 8; j++){
                    var b:Button = new Button;
                    box3.addChild(b)
                    b.label = "Box3: " + String(j)
                }
            }

        ]]>
    </mx:Script>

    <mx:HBox id="box2" width="100%" click="box2.x = mouseX" borderStyle="solid"/>
    <mx:HBox id="box3" width="100%" creationComplete="moveBox3()" borderStyle="solid"/>
</mx:Application>

如何防止这种情况发生,或者更新的方式来制作像我正在尝试的更新代码?

1 个答案:

答案 0 :(得分:0)

问题仍然存在,但我发现了。为了记录,我最终创建了一个自定义组件来处理内部滚动(画布而不是HBox,所以你可以引用子项,并且当你removeChild它不会跳转)。我只把其中两个放在舞台上,它运作得很好。