Маскированная область мувиклипа включена в высоту

  • У меня есть файл MovieClip, который я скомпилировал в SWC и импортировал в Flash Builder.

  • MovieClip имеет замаскированную (видимую) область и невидимую область, скрытую маской:

    MC

  • Я завернул MC в UIMovieClip, чтобы можно было вставить в MXML приложения:

    <my:SomeMaskedControl bottom="0" />

  • В MXML я установил атрибут bottom="0", я хотел, чтобы UIMovieClip располагался внизу приложения. К сожалению, невидимая область MC все портит:

    Приложение

  • Я хотел, чтобы это было примерно так:

    Лучшее приложение

Я понимаю, что могу просто изменить атрибут bottom на отрицательное значение, но я думаю, что это испортит архитектуру приложения. Есть ли способ исправить это, чтобы я все еще мог использовать bottom="0"?


person Drahcir    schedule 27.02.2013    source источник
comment
Я думаю, это потому, что это MovieClip. Что, если вы экспортируете как swf, а не swc, может быть, это сработает?   -  person Neil    schedule 27.02.2013
comment
Возможно, вам потребуется переопределить свойство высоты этого мувиклипа и вернуть высоту от пересечения границ маскируемого объекта с границами маски.   -  person Marcela    schedule 27.02.2013
comment
попробуйте нижнюю часть для маски=0 и верхнюю часть мувиклипа={mask.x}   -  person Smolniy    schedule 27.02.2013
comment
bottom = mask.height-this.height или, возможно, вам нужно будет вызвать updateDisplayList   -  person The_asMan    schedule 28.02.2013


Ответы (1)


Попробуйте использовать хак Колина Мука: 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;
    }
}
person Ilya Zaytsev    schedule 28.02.2013