【问题标题】:draw sprite into bitmapdata with a strange mask使用奇怪的掩码将精灵绘制到位图数据中
【发布时间】:2009-04-14 13:51:25
【问题描述】:

我遇到了将精灵绘制到 BitmapData 中的奇怪行为。当直接绘制到屏幕上时,这个精灵看起来很好。但是当这个 sprite 被绘制到 BitmapData 中时,这个 sprite 被屏蔽了...... 但是没有这样的 mask 应用到那个 sprite!

可以通过对我正在绘制的精灵应用/不应用不同的蒙版来关闭和打开这个“坏蒙版”。这个面具与“坏面具”的形状或位置不同。

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>

【问题讨论】:

    标签: apache-flex flash actionscript-3 actionscript sprite


    【解决方案1】:

    更改掩码添加行到:

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

    解决了这个问题,因此剪辑的相对坐标空间可能存在一些混淆。我认为您应该在显示列表中将您的蒙版与蒙版的 DisplayObject 保持在同一级别,以避免混淆。

    【讨论】:

    • 谢谢!我在 api 中的掩码示例之后对我的代码进行了建模,当像我的示例中那样修改时,它似乎有点错误。
    猜你喜欢
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 2016-03-13
    • 1970-01-01
    相关资源
    最近更新 更多