2012-03-23 67 views
4

任何人都可以在AS3中使用BlendMode.ERASE時如何避免看到線條?在flash中使用BlendMode「擦除」時出現奇怪的行爲AS3

這裏是一個例子。我在舞臺上繪製黑色背景,然後將2個重疊圓圈畫到一個精靈上,並嘗試將它們從背景中抹去。

  var solidBitmapData = new BitmapData(550,400,true,0x000000); 
      var mySpriteLayer = new Sprite(); 

      // Create black background. 
      mySpriteLayer.graphics.beginFill(0x000000); 
      mySpriteLayer.graphics.drawRect(0,0,550,400); 
      mySpriteLayer.graphics.endFill(); 

      // Draw it to bitmap data. 
      solidBitmapData.draw(mySpriteLayer); 

      // Clear sprite. 
      mySpriteLayer.graphics.clear(); 

      // Draw two circles 
      mySpriteLayer.graphics.beginFill(0xFF0000); 
      mySpriteLayer.graphics.drawCircle(200,200,50); 
      mySpriteLayer.graphics.endFill(); 
      mySpriteLayer.graphics.beginFill(0xFF0000); 
      mySpriteLayer.graphics.drawCircle(250,200,50); 
      mySpriteLayer.graphics.endFill(); 

      // Draw circles to bitmap with blend mode erase. 
      solidBitmapData.draw(mySpriteLayer,null,null,BlendMode.ERASE); 

      // Create bitmap and add to stage. 
      var solidBitmap = new Bitmap(solidBitmapData); 
      addChild(solidBitmap); 

Lines shown here

我說的是在圓的中間線。這似乎是與線型有關,但我已經嘗試將其設置爲零和α爲0,但我無法擺脫線條。

任何想法?

回答

6

您需要的「mySpriteLayercacheAsBitmap屬性設置爲「true」:

 mySpriteLayer.cacheAsBitmap = true; 

中作爲混合模式上的像素進行計算,它的工作原理更準確地說柵格數據,比矢量數據。

+0

完美。我確信我已經嘗試過,但一定錯過了它,因爲它完美無缺。 – Ben 2012-03-23 15:30:26

+0

關於爲什麼實際上使其工作的任何洞察力?我認爲這是我見過的最明顯的修復之一:D – divillysausages 2012-03-23 22:39:37

+1

@divillysausages再次檢查我的答案。 – Engineer 2012-03-24 07:45:22

0

也許這是雪碧混合對背景做出反應的方式。你有沒有在白色背景上用兩個黑圈試過這個?如果你得到相同的線條(只有白色),你可以得出結論,這是混合的工作方式。

1
this.blendMode = BlendMode.LAYER; 

Adob​​e的ActionScript 3.0參考說有關類的BlendMode和字段ERASE:

擦除基於所述顯示對象的alpha值的背景。 此過程要求將父級 顯示對象的blendMode屬性設置爲flash.display.BlendMode.LAYER。

相關問題