我遇到了将精灵绘制到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>
答案 0 :(得分:1)
将遮罩添加行更改为:
canvasSprite.addChild( maskSp );
canvasSprite.mask = maskSp;
解决问题,因此可能会对剪辑的相对坐标空间产生一些混淆。我认为你应该将你的面具保持在与置换列表中的蒙版DisplayObject相同的级别,以避免混淆。