Сброс целевых значений в составном эффекте - PullRequest
2 голосов
/ 30 апреля 2011

Нам нужно уметь обрабатывать эффект «воспроизведения» (воспроизведение / пауза / поиск), при котором характер эффекта не может быть определен во время компиляции.

Проблема, с которой мы сталкиваемся, - сброс состояния цели (ей) после завершения эффекта. Если мы вручную перетащим ползунок поиска в начало, все работает нормально. Однако, если мы установим playheadTime составного эффекта обратно в 0, затронутые цели сохранят свое первоначальное значение, пока playheadTime не достигнет правильной позиции для воздействия на цель.

Вот упрощенный (насколько я мог) тестовый пример с включенным источником представления:

http://www.openbaseinteractive.com/_tmp/PlayableEffectTest/

Проблема проявляется, если вы дадите ей проиграть до конца, а затем нажмете кнопку воспроизведения, чтобы начать ее заново.

Как лучше всего вручную сбросить целевые значения, если точный характер эффекта неизвестен?

Большое спасибо за ваше время!

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

Я забыл упомянуть, что мы используем предварительный выпуск Flex 4.5.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2011

Что ж, это немного глупо, но я смог сделать это, вызвав некоторые внутренние методы эффекта для захвата начальных значений, а затем присвоил эти значения целевым объектам при сбросе.

import mx.core.mx_internal;
use namespace mx_internal;

private var _propertyChangesArray:Array;

protected function captureStartValues(effect:Object):void
{
    effect.captureStartValues();
    _propertyChangesArray = effect.propertyChangesArray;
}

protected function reset(effect:Object):void
{
    for each(var change:PropertyChanges in _propertyChangesArray)
    {
        var target:Object = change.target;

        for(var p:String in change.start)
        {
            if(target.hasOwnProperty(p))
            {
                var startVal:* = change.start[p];
                var endVal:* = target[p];

                if(!isNaN(startVal) && startVal != endVal)
                {
                    target[p] = startVal;
                }
            }
        }
    }

    effect.playheadTime = 0;
}

Я не знаю, является ли это лучшим способом для достижения этой цели, но, похоже, он работает до сих пор. Я абсолютно открыт для предложений по лучшему методу.

ура!

0 голосов
/ 30 апреля 2011
...