屏蔽的MovieClip区域包含在高度中

时间:2013-02-27 16:49:08

标签: actionscript-3 flex flash-builder mxml flash-cs6

  • 我有一个MovieClip,我编译为SWC并导入Flash Builder。

  • MovieClip有一个蒙面(可见)区域,以及一个被蒙版隐藏的不可见区域:

    MC

  • 我将MC包装在UIMovieClip中,以便我可以插入应用程序的MXML中:

    <my:SomeMaskedControl bottom="0" />

  • 在MXML中,我设置了属性bottom="0",我希望UIMovieClip位于应用程序的底部。不幸的是,MC的隐形区域正在弄乱它:

    Application

  • 我希望它更像这样:

    BetterApplication

我意识到我可以将bottom属性更改为负值,但我认为这会弄乱应用程序的体系结构。有没有办法解决它,以便我仍然可以使用bottom="0"

1 个答案:

答案 0 :(得分:1)

尝试使用Colin Moock hack:http://www.moock.org/blog/archives/000292.html

public class SomeMaskedControl extends UIMovieClip
{
    protected var mc:MaskedMC;

    public function SomeMaskedControl()
    {
        super();

        mc = new MaskedMC();

        addChild(mc);
    }

    public function getVisibleHeight (o:DisplayObject):Number {
        var bitmapDataSize:int = 2000;
        var bounds:Rectangle;
        var bitmapData:BitmapData = new BitmapData(bitmapDataSize, bitmapDataSize, true, 0);
        bitmapData.draw(o);
        bounds = bitmapData.getColorBoundsRect( 0xFF000000, 0x00000000, false );
        bitmapData.dispose(); 
        return bounds.y + bounds.height;
    }

    override public function get height():Number
    {
        return getVisibleHeight( mc );
    }
}

但我不喜欢这样。如果你可以创建掩码作为MovieClip,并设置实例名称,在应用程序中你可以获得mask.height并替换UIMovieClip高度:

public class SomeMaskedControl extends UIMovieClip
{
    protected var mc:MaskedMC;

    public function SomeMaskedControl()
    {
        super();

        mc = new MaskedMC();

        addChild(mc);
    }

    override public function get height():Number
    {
        return mc.maskMC.height;
    }
}