重置复合效果中的目标值

时间:2011-04-29 20:33:15

标签: flex effects

我们需要能够处理“可播放”(播放/暂停/搜索)效果,其中效果的性质无法在编译时确定。

我们遇到的问题是在效果完成后重置目标状态。如果我们手动将搜索滑块拖回到开头,一切正常。但是,如果我们将复合效果的播放头时间设置回0,则受影响的目标将保持其原始值,直到playheadTime到达正确的位置以实现目标。

以下是启用了视图源的简化(尽可能多)测试用例:

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

如果你让它播放到最后,然后点击播放按钮开始播放,就会出现问题。

考虑到效果的确切性质未知,手动重置目标值的最佳方法是什么?

非常感谢你的时间!

修改

我忘了提到我们正在使用Flex 4.5预览版。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

嗯,它有点kludgy,但我能够通过调用效果上的一些内部方法捕获起始值,然后在重置时将这些值分配给目标来实现此目的。

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;
}

我不知道这是否是实现这一目标的最佳方式,但它似乎到目前为止仍在发挥作用。我绝对愿意接受更好的方法。

干杯!