Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 在复合效果中重置目标值_Apache Flex_Effects - Fatal编程技术网

Apache flex 在复合效果中重置目标值

Apache flex 在复合效果中重置目标值,apache-flex,effects,Apache Flex,Effects,我们需要能够处理“可播放”(play/pause/seek)效果,在这种效果中,效果的性质无法在编译时确定 我们遇到的问题是在效果完成后重置目标状态。如果我们手动将seek滑块拖回起始位置,一切正常。但是,如果我们将合成效果的playheadTime设置回0,则受影响的目标将保留其原始值,直到playheadTime到达影响目标的正确位置 下面是一个启用了查看源代码的简化(尽可能多)测试用例: 如果您让它播放到最后,然后按播放按钮重新开始,则会演示此问题 鉴于效果的确切性质未知,手动重置目标值

我们需要能够处理“可播放”(play/pause/seek)效果,在这种效果中,效果的性质无法在编译时确定

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

下面是一个启用了查看源代码的简化(尽可能多)测试用例:

如果您让它播放到最后,然后按播放按钮重新开始,则会演示此问题

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

非常感谢您的时间

编辑

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

您尝试过:

effect.reverse()
更多信息

()

您是否尝试过:

effect.reverse()
更多信息


()

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

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;
}
我不知道这是否是实现这一目标的最佳方式,但到目前为止它似乎正在发挥作用。我完全愿意接受关于更好方法的建议


干杯

这有点麻烦,但我可以通过调用一些内部方法来捕获开始值,然后在重置时将这些值分配给目标来实现这一点

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;
}
我不知道这是否是实现这一目标的最佳方式,但到目前为止它似乎正在发挥作用。我完全愿意接受关于更好方法的建议


干杯

这只是起到了相反的作用。我需要重新开始,从头开始。@drkstr我不明白,从最初的帖子上说你想从头开始播放效果;只是希望将元素设置回其初始值。使用effect.reverse()应该可以做到这一点。存储和重置初始值(如您自己的回答中所述)似乎是一个可行的选择。我想是的。谢谢你的建议。:)这只是起到了相反的作用。我需要重新开始,从头开始。@drkstr我不明白,从最初的帖子上说你想从头开始播放效果;只是希望将元素设置回其初始值。使用effect.reverse()应该可以做到这一点。存储和重置初始值(如您自己的回答中所述)似乎是一个可行的选择。我想是的。谢谢你的建议。:)