2012-03-23 5 views
4

AS3でBlendMode.ERASEを使用しているときに、ラインの表示を避ける方法はありますか?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); 

Lines shown here

Iは、円の真ん中にラインについて話しています。私はそれを0に設定しようとしましたが、0にアルファを設定しようとしましたが、私はラインを取り除くことができません。

アイデア?

答えて

6

あなたは「true」から「mySpriteLayer」のcacheAsBitmapプロパティを設定する必要があります。

 mySpriteLayer.cacheAsBitmap = true; 

ブレンドモードは、ピクセルの計算を実行すると、それはベクトルデータよりも、ラスタデータをより正確に動作します。

+0

パーフェクト。私はそれを試したと確信していましたが、完璧に働いたので、それを逃してしまったに違いありません。 – Ben

+0

なぜそれが実際に動作するのかについての洞察はありますか?私はそれが私が今まで見た中で最も不確実な修正の一つだと思う:D – divillysausages

+1

@divillysausagesもう一度私の答えを確認してください。 – Engineer

0

これは、スプライトのブレンドがバックグラウンドに反応している可能性があります。あなたは白い背景に2つの黒い円でこれを試しましたか?同じライン(白のみ)が得られれば、これがブレンドの仕方であると結論づけることができます。

1
this.blendMode = BlendMode.LAYER; 

アドビのActionScript 3.0リファレンスは、クラスするBlendModeとフィールドERASEについてこう述べています。

は、表示オブジェクトのアルファ値に基づいて背景を消去します。 このプロセスでは、親の 表示オブジェクトのblendModeプロパティをflash.display.BlendMode.LAYERに設定する必要があります。

関連する問題