문제

나는 sprite를 BitmapData로 끌어들이는 이상한 행동에 빠졌습니다. 이 스프라이트는 화면에 직접 그려 질 때 괜찮아 보입니다. 그러나이 스프라이트가 BitmapData로 끌려 가면 스프라이트가 마스크되고 있습니다 ... 그러나 그 스프라이트에는 그러한 마스크가 적용되지 않습니다!

이 "나쁜 마스크"는 제가 그리는 스프라이트에 다른 마스크를 적용 / 적용하여 전환 할 수 있습니다. 이 마스크는 "나쁜 마스크"와 같은 모양이나 위치가 아닙니다.

대체 텍스트 http://img5.imageshack.us/img5/8310/masked.png

II가 뭔가 잘못하고 있는지 또는 이것이 버그인지 궁금합니다. 나는 그 방식으로 마스크를 추가하고 있습니다 문서에 설명되어 있습니다. "나쁜 마스크"는 부모에 비해 내가 그리는 스프라이트 (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>
도움이 되었습니까?

해결책

라인을 추가하는 마스크 변경 :

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

문제를 해결하므로 클립의 상대 좌표 공간과 약간의 혼란이있을 수 있습니다. 혼란을 피하기 위해 디스플레이리스트의 마스크 디스플레이 도체와 같은 수준으로 마스크를 유지해야한다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top