2009-04-14 12 views
1

スプライトをBitmapDataに描画するときに異常な動作が発生しました。このスプライトは、画面に直接描画するときれいに見えます。しかし、このスプライトがBitmapDataに描画されるとき、スプライトはマスクされています... そのスプライトに適用されるマスクはありません!異常なマスクを使用してビットマップデータにスプライトを描画する

この「不良マスク」は、私が描画しているスプライトに別のマスクを適用するか適用しないで切り替えることができます。このマスクは、「不良マスク」と同じ形状または位置ではありません。

alt text http://img5.imageshack.us/img5/8310/masked.png

私は私が何か間違ったことか、これはバグであればい場合、私は疑問に思って?私はdescribed in the documentationの方法でマスクを追加しています。 "不良マスク"は、私が描画しているスプライトの位置(drawingSprite)からその座標をその親に対して相対的に取得するように見えます。行を追加マスクを変更


package 
{ 

import flash.display.Bitmap; 
import flash.display.BitmapData; 
import flash.display.Sprite; 

import mx.core.UIComponent; 

public class tmpa extends UIComponent 
{ 

    public function tmpa():void 
    { var topSprite:Sprite = new Sprite(); 
     topSprite.x = 0; 
     topSprite.y = 0; 
     addChild(topSprite); 

     var canvasSprite:Sprite = new Sprite(); 
     canvasSprite.x = 5; 
     canvasSprite.y = 35; 
     topSprite.addChild(canvasSprite); 

     var drawingSprite:Sprite = new Sprite(); 
     canvasSprite.addChild(drawingSprite); 

     var maskSp:Sprite = new Sprite(); 
     maskSp.graphics.beginFill(0xFFFFFF, 1); 
     maskSp.graphics.drawRect(0, 0, 200, 200); 
     maskSp.graphics.endFill(); 

     //toggle these two lines of code 
     canvasSprite.addChild(maskSp); 
     drawingSprite.mask = maskSp; 

     drawingSprite.graphics.beginFill(0xFF0000, 1); 
     drawingSprite.graphics.drawRect(0, 0, 200, 200); 
     drawingSprite.graphics.endFill(); 

     drawingSprite.graphics.beginFill(0x00FF00, 1); 
     drawingSprite.graphics.drawCircle(0, 0, 100); 
     drawingSprite.graphics.endFill(); 


     //a snapshot with default blue background 
     var bmd:BitmapData = new BitmapData(100, 100, false, 0x0000FF); 
     bmd.draw(drawingSprite); 
     var bm:Bitmap = new Bitmap(bmd); 
     bm.x = 300; 
     bm.y = 35; 
     addChild(bm); 
    } 

} 
} 

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:a="*" width="100%" height="100%"> 
    <a:tmpa id="t" width="100%" height="100%" x="0" y="0" left="0" top="0"/> 
</mx:Application> 

答えて

1

canvasSprite.addChild(maskSp); 
canvasSprite.mask = maskSp; 

は、問題を解決するため、いくつかの混乱は、クリップのスペースを相対座標とそうあります。混乱を避けるため、あなたのマスクを表示リストのマスクされたDisplayObjectと同じレベルに保つべきだと思います。

+0

Thx!私のコードは、私の例のように修正したときに少しバギーに見える、apiのマスクの例の後にモデル化しました。 – jedierikb

関連する問題