【问题标题】:Resetting target values in a composite effect在复合效果中重置目标值
【发布时间】:2011-04-29 20:33:15
【问题描述】:

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

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

这是一个启用了视图源的简化(尽我所能)测试用例:

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

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

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

非常感谢您的宝贵时间!

编辑

我忘了提到我们使用的是 Flex 4.5 预览版。

【问题讨论】:

    标签: apache-flex effects


    【解决方案1】:

    【讨论】:

    • 这只是反向播放效果。我需要重新开始,从头开始玩。
    • @drkstr 没看懂,原帖说你想从头开始玩效果;只是你想将元素设置回它们的初始值。使用 effect.reverse() 应该做到这一点。存储和重置初始值(如您自己的回答中所述)似乎是一个可行的选择。
    • 我想会的。感谢您的建议。 :)
    【解决方案2】:

    这有点笨拙,但我可以通过调用效果的一些内部方法来捕获起始值,然后在重置时将这些值分配给目标。

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

    我不知道这是否是完成此任务的最佳方法,但它似乎到目前为止有效。我绝对愿意接受有关更好方法的建议。

    干杯!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      • 2012-11-26
      相关资源
      最近更新 更多