2012-03-23 4 views
4

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

Я говорю о линии в середине кругов. Кажется, что-то связано с linestyle, но я пробовал установить его на ноль, а альфа - на 0, но я не могу избавиться от строк.

Любые идеи?

ответ

6

Вы должны установить cacheAsBitmap свойства «mySpriteLayer» до «» true:

 mySpriteLayer.cacheAsBitmap = true; 

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

+0

Perfect. Я был уверен, что пробовал это, но, должно быть, пропустил его, потому что он работал отлично. – Ben

+0

любое понимание того, почему это действительно заставляет его работать? Я думаю, что это одно из самых очевидных исправлений, которые я когда-либо видел: D – divillysausages

+1

@divillysausages Еще раз проверьте мой ответ. – Engineer

0

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

1
this.blendMode = BlendMode.LAYER; 

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

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

Смежные вопросы