2010-04-21 95 views
0

我在Flex中編寫了一個工具,它允許我使用分層位圖設計合成精靈,然後將它們「烘烤」成低開銷的單個bitmapData。我發現了一個奇怪的行爲,我無法解釋:切換圖層的「可見」屬性對於每個圖層都有兩次工作(即,我可以關閉它,然後再次打開),然後不再爲該圖層 - 層從此處保持可見。Flash「可見」問題

如果我覆蓋層上的「設置可見」本身:

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(); 
} 

的改變()方法 「烘焙」 的位圖:

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」。

+0

還請顯示您使用的代碼來切換導致您發出問題的可見性。 – invertedSpear 2010-04-21 23:19:11

回答

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(); 
    } 
}