我们需要能够处理“可播放”(播放/暂停/搜索)效果,其中效果的性质无法在编译时确定。
我们遇到的问题是在效果完成后重置目标状态。如果我们手动将搜索滑块拖回到开头,一切正常。但是,如果我们将复合效果的播放头时间设置回0,则受影响的目标将保持其原始值,直到playheadTime到达正确的位置以实现目标。
以下是启用了视图源的简化(尽可能多)测试用例:
http://www.openbaseinteractive.com/_tmp/PlayableEffectTest/
如果你让它播放到最后,然后点击播放按钮开始播放,就会出现问题。
考虑到效果的确切性质未知,手动重置目标值的最佳方法是什么?
非常感谢你的时间!
修改的
我忘了提到我们正在使用Flex 4.5预览版。
答案 0 :(得分:0)
你试过了吗?
effect.reverse()
更多信息
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/effects/IEffect.html
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/effects/IEffect.html#reverse()
答案 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;
}
我不知道这是否是实现这一目标的最佳方式,但它似乎到目前为止仍在发挥作用。我绝对愿意接受更好的方法。
干杯!