Apache flex 在复合效果中重置目标值
我们需要能够处理“可播放”(play/pause/seek)效果,在这种效果中,效果的性质无法在编译时确定 我们遇到的问题是在效果完成后重置目标状态。如果我们手动将seek滑块拖回起始位置,一切正常。但是,如果我们将合成效果的playheadTime设置回0,则受影响的目标将保留其原始值,直到playheadTime到达影响目标的正确位置 下面是一个启用了查看源代码的简化(尽可能多)测试用例: 如果您让它播放到最后,然后按播放按钮重新开始,则会演示此问题 鉴于效果的确切性质未知,手动重置目标值的最佳方法是什么 非常感谢您的时间 编辑 我忘了提到我们正在使用Flex 4.5预览版。您尝试过:Apache flex 在复合效果中重置目标值,apache-flex,effects,Apache Flex,Effects,我们需要能够处理“可播放”(play/pause/seek)效果,在这种效果中,效果的性质无法在编译时确定 我们遇到的问题是在效果完成后重置目标状态。如果我们手动将seek滑块拖回起始位置,一切正常。但是,如果我们将合成效果的playheadTime设置回0,则受影响的目标将保留其原始值,直到playheadTime到达影响目标的正确位置 下面是一个启用了查看源代码的简化(尽可能多)测试用例: 如果您让它播放到最后,然后按播放按钮重新开始,则会演示此问题 鉴于效果的确切性质未知,手动重置目标值
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()应该可以做到这一点。存储和重置初始值(如您自己的回答中所述)似乎是一个可行的选择。我想是的。谢谢你的建议。:)