Apache flex Flex 4 mx:HDividedBox在启用LiveDraging的情况下闪烁*仅当鼠标位于组件上方时*

Apache flex Flex 4 mx:HDividedBox在启用LiveDraging的情况下闪烁*仅当鼠标位于组件上方时*,apache-flex,mouseover,drag,flicker,Apache Flex,Mouseover,Drag,Flicker,我注意到,“开箱即用”HDividedBox在启用LiveDraging时会出现一些严重的闪烁问题,但只有在拖动时指针位于分隔框的内容上方时才会出现。如果在拖动时抓住BoxDifferer并将指针从组件上移开,闪烁将消失,组件将正确渲染 我已经用我的定制组件和一个非常基本的HDividedBox实现测试了这一点,该HDividedBox实现包含Group、SkinnableContainer和BoxContainer子级,以及带有剪辑的嵌套组。所有类型的孩子表现出相同的行为。如果有人对此有一个解

我注意到,“开箱即用”HDividedBox在启用LiveDraging时会出现一些严重的闪烁问题,但只有在拖动时指针位于分隔框的内容上方时才会出现。如果在拖动时抓住BoxDifferer并将指针从组件上移开,闪烁将消失,组件将正确渲染

我已经用我的定制组件和一个非常基本的HDividedBox实现测试了这一点,该HDividedBox实现包含Group、SkinnableContainer和BoxContainer子级,以及带有剪辑的嵌套组。所有类型的孩子表现出相同的行为。如果有人对此有一个解决办法,我将非常感谢一些意见

非常感谢,下面是一段代码片段,它显示了我的问题


谢谢


Aaron

尽管拉动分隔器查看该样本的行为很有趣,但我没有遇到任何闪烁问题。可能的解释:

  • 处理器速度-我运行的处理器速度很快,其他一些处理器可能无法跟上所需的重画次数。您也可能正在使用比纯色更难绘制的更复杂的组件

  • 鼠标事件可能在您使用的组件中被调度/处理多次

  • 当我偶尔移动横杆时,我确实感觉到一些切割器“抽搐”。这很可能是由于每次分割器仅移动一个像素时,都需要进行多次布局计算,以根据百分比计算每个分割框的正确宽度

  • 编辑:运行此命令并移动分隔符,以了解由于使用LiveDraging而发生的大小调整/重画次数:

    <fx:Declarations>
        <fx:int id = "resizeCount">0</fx:int>
    </fx:Declarations>
    
    
        <mx:HDividedBox 
            width = "500" height = "200"
            liveDragging = "true">
            <s:SkinnableContainer 
                minWidth = "0"
                percentHeight = "100"
                backgroundColor = "green"
    
                resize = "{trace(resizeCount);resizeCount++}" />
            <s:SkinnableContainer 
                minWidth = "0"
                percentHeight = "100"
                backgroundColor = "blue"
    
                resize = "{trace(resizeCount);resizeCount++}" />
            <s:SkinnableContainer 
                minWidth = "0"
                percentHeight = "100"
                backgroundColor = "yellow"
    
                resize = "{trace(resizeCount);resizeCount++}" />
            <s:SkinnableContainer 
                minWidth = "0"
                percentHeight = "100"
                backgroundColor = "red"
    
                resize = "{trace(resizeCount);resizeCount++}" />
        </mx:HDividedBox>
    
    
    0
    

    它很快就进入了数百。。。然后成千上万…

    嗯。。。我也在运行一个非常快的处理器。现在,我已经能够使用我在4个不同的盒子上发布的代码来重现这一点。它通常需要快速拖动,并将显示在元素的右边缘,直接位于分隔符的右侧。您使用的浏览器、操作系统和flash版本是什么?我尝试了Chrome和自动使用的最新版本的flash,以及IE9和相对较新版本的调试器flash插件。这是在Windows7上的i7 920@3.8ghz…我在一个iMac上运行OSX 10.6.6,有i3 3.06GHz和4GB的RAM。。。Flash 10.1.102.64。你的马力肯定比我大,所以我想这可以解释为什么你看不到它。我尝试了Chrome、Firefox和Safari,在iMAc和XP Core2 Duo 3Ghz的4GB内存盒上都得到了相同的结果。啊,众所周知,Flash在OSX上的运行比Windows更差。我从来没有体验过它,因为我是一个Windows的家伙,但我肯定看到过很多次报告,比如:如果你家里有一台Windows机器,试一下,然后分享结果。我检查了一个Windows XP Core2 Duo 3Ghz的盒子,它有4 GB内存,所有相同的浏览器都有相同的结果。如果这是处理处理器密集型计算(如3D渲染),我可以看出闪存性能差是罪魁祸首,但我们这里讨论的是渲染单个精灵。。。不应该是加工猪,对吧?
    <fx:Declarations>
        <fx:int id = "resizeCount">0</fx:int>
    </fx:Declarations>
    
    
        <mx:HDividedBox 
            width = "500" height = "200"
            liveDragging = "true">
            <s:SkinnableContainer 
                minWidth = "0"
                percentHeight = "100"
                backgroundColor = "green"
    
                resize = "{trace(resizeCount);resizeCount++}" />
            <s:SkinnableContainer 
                minWidth = "0"
                percentHeight = "100"
                backgroundColor = "blue"
    
                resize = "{trace(resizeCount);resizeCount++}" />
            <s:SkinnableContainer 
                minWidth = "0"
                percentHeight = "100"
                backgroundColor = "yellow"
    
                resize = "{trace(resizeCount);resizeCount++}" />
            <s:SkinnableContainer 
                minWidth = "0"
                percentHeight = "100"
                backgroundColor = "red"
    
                resize = "{trace(resizeCount);resizeCount++}" />
        </mx:HDividedBox>