Странное поведение при использовании BlendMode «стереть» во флеш AS3 - PullRequest
4 голосов
/ 23 марта 2012

Может ли кто-нибудь объяснить, как избежать появления линий при использовании BlendMode.ERASE в 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, но я не могу избавиться от линий.

Есть идеи?

Ответы [ 3 ]

6 голосов
/ 23 марта 2012

Вам необходимо установить cacheAsBitmap свойство 'mySpriteLayer' в 'true':

     mySpriteLayer.cacheAsBitmap = true;

Поскольку режим наложения выполняет вычисления на пикселях, он работает более точно с растровыми данными, чем с векторными данными.

1 голос
/ 23 марта 2012
this.blendMode = BlendMode.LAYER;

Справочник Adobe ActionScript 3.0 говорит о классе BlendMode и поле ERASE:

Стирает фон на основе альфа-значения экранного объекта. Этот процесс требует, чтобы свойство blendMode родительского для экранного объекта должно быть установлено значение flash.display.BlendMode.LAYER.

0 голосов
/ 23 марта 2012

Возможно, именно так смесь Sprite реагирует на фон. Вы пробовали это с двумя черными кругами на белом фоне? Если вы получите те же строки (только белые), вы сможете заключить, что именно так работает смесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...