Flash "видимая" проблема - PullRequest
       9

Flash "видимая" проблема

0 голосов
/ 22 апреля 2010

Я пишу инструмент во Flex, который позволяет мне проектировать составные спрайты с использованием многоуровневых растровых изображений, а затем «запекать» их в однобитовые битовые данные с малыми издержками. Я обнаружил странное поведение, которое не могу объяснить: переключение свойства «visible» моих слоев работает дважды для каждого слоя (т. Е. Я могу отключить его, затем снова включить), а затем никогда больше для этого слоя - слой остается видимым с этой точки.

Если я переопределить «установить видимым» на слое, как так:

override public function set visible(value:Boolean):void
    {           
        if(value == false) this.alpha = 0;
        else {this.alpha = 1;}
    }

Проблема исчезла, и я могу переключать «видимость» столько, сколько захочу. Есть идеи, что может быть причиной этого?

Редактировать:

Вот код, который делает звонок:

private function onVisibleChange():void
{
            _layer.visible = layerVisible.selected;
            changed();
}

Метод updated () "запекает" растровое изображение:

public function getBaked():BitmapData
    {
        var w:int = _composite.width + (_atmosphereOuterBlur * 2);
        var h:int = _composite.height + (_atmosphereOuterBlur * 2);
        var bmpData:BitmapData = new BitmapData(w,h,true,0x00000000);
        var matrix:Matrix = new Matrix();
        var bounds:Rectangle = this.getBounds(this);
        matrix.translate(w/2,h/2);
        bmpData.draw(this,matrix,null,null,new Rectangle(0,0,w,h),true);
        return bmpData;
    }

Между прочим, пока слой все еще видим, с помощью отладчика Flex я могу проверить, что видимое значение слоя равно "false".

1 Ответ

0 голосов
/ 22 апреля 2010

Подождите кадр между настройкой visible и вызовом changed(). Используйте модель invalidateProperties()/commitProperties().

private bool _isChanged = false;
private function onVisibleChange():void
{
            _layer.visible = layerVisible.selected;
            _isChanged = true;
            invalidateProperties();
}

protected override function commitProperties():void {
    super.commitProperties();

    if (_isChanged) {
        _isChanged = false;
        changed();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...