Flash“可见”问题

时间:2010-04-21 23:07:23

标签: flex flash visible

我正在Flex中编写一个工具,它允许我使用分层位图设计复合精灵,然后将它们“烘焙”成低开销的单个bitmapData。我发现了一个我无法解释的奇怪行为:切换我的图层的“可见”属性对每一层都工作两次(即,我可以将其关闭,然后再打开),然后再也不再为该层 - 从那一点开始,图层保持可见。

如果我在图层上覆盖“set visible”:

override public function set visible(value:Boolean):void
    {           
        if(value == false) this.alpha = 0;
        else {this.alpha = 1;}
    }

问题消失了,我可以根据需要切换“可见性”。可能导致这种情况的任何想法?

修改:

以下是拨打电话的代码:

private function onVisibleChange():void
{
            _layer.visible = layerVisible.selected;
            changed();
}

changed()方法“烘焙”位图:

public function getBaked():BitmapData
    {
        var w:int = _composite.width + (_atmosphereOuterBlur * 2);
        var h:int = _composite.height + (_atmosphereOuterBlur * 2);
        var bmpData:BitmapData = new BitmapData(w,h,true,0x00000000);
        var matrix:Matrix = new Matrix();
        var bounds:Rectangle = this.getBounds(this);
        matrix.translate(w/2,h/2);
        bmpData.draw(this,matrix,null,null,new Rectangle(0,0,w,h),true);
        return bmpData;
    }

顺便提一下,虽然图层仍然可见,但使用Flex调试器我可以验证图层的可见值是否为“false”。

1 个答案:

答案 0 :(得分:0)

在设置visible和致电changed()之间等待一段时间。使用invalidateProperties()/commitProperties()模型。

private bool _isChanged = false;
private function onVisibleChange():void
{
            _layer.visible = layerVisible.selected;
            _isChanged = true;
            invalidateProperties();
}

protected override function commitProperties():void {
    super.commitProperties();

    if (_isChanged) {
        _isChanged = false;
        changed();
    }
}