簡體   English   中英

在Flash AS3中使用BlendMode“擦除”時出現奇怪的行為

[英]Strange behaviour when using BlendMode “erase” in flash AS3

任何人都可以在AS3中使用BlendMode.ERASE時如何避免看到線條?

這是一個例子。 我在舞台上繪制了一個黑色背景,然后將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);

這里顯示的行

我在談論圈子中間的線條。 這似乎與linestyle有關但我已經嘗試將其設置為零並將alpha設置為0但我無法擺脫線條。

有任何想法嗎?

您需要將' mySpriteLayer '的cacheAsBitmap屬性設置為' true ':

     mySpriteLayer.cacheAsBitmap = true;

由於混合模式對像素執行計算,因此與光柵數據相比,它比矢量數據更精確。

this.blendMode = BlendMode.LAYER;

Adobe的ActionScript 3.0參考說明了類BlendMode和字段ERASE:

根據顯示對象的alpha值擦除背景。 此過程要求將父顯示對象的blendMode屬性設置為flash.display.BlendMode.LAYER。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM