Actionscript 3 使用GreenSock分离运动吐温和α吐温

Actionscript 3 使用GreenSock分离运动吐温和α吐温,actionscript-3,air,tween,flash-cs6,gsap,Actionscript 3,Air,Tween,Flash Cs6,Gsap,我在AS3中使用GreenSock的TweenMax,在iOS中使用FlashAir 3.2。我正在尝试使用autoAlpha插件在移动tween期间的某个点(例如到达tween中间后)获取一个文本字符串,使其开始褪色,而不是从开始到结束。目前,它正在从开始位置到结束位置的移动和alpha之间来回移动。这可能吗 TweenMax.to(textOne, 14, {x:xScreenPos - 150, ease:SlowMo.ease.config(1, 0), repeat:-1, autoA

我在AS3中使用GreenSock的TweenMax,在iOS中使用FlashAir 3.2。我正在尝试使用
autoAlpha
插件在移动tween期间的某个点(例如到达tween中间后)获取一个文本字符串,使其开始褪色,而不是从开始到结束。目前,它正在从开始位置到结束位置的移动和alpha之间来回移动。这可能吗

TweenMax.to(textOne, 14, {x:xScreenPos - 150, ease:SlowMo.ease.config(1, 0), repeat:-1, autoAlpha:0.5});
编辑:这是当前代码,函数和语法已修复,但由于某些原因,它无法工作。仍然有一个运动的吐温,但阿尔法不再吐温了。但逻辑似乎是正确的。(
alpha
现在取代了
autoAlpha
,因为它适用于后者)

编辑:
totalProgress()
已替换为
progress()
和alpha-tween,但alpha-tween还有另一个问题。我已经找到了要调试的
textOne.alpha
tween.progress()
。或者是因为AS3的单线程特性,它会弄乱每个循环末尾的调用逻辑。。。因为alpha-tween有一个延迟结束,所以在progress-tween开始之前,REPEAT调用不能及时将alpha设置为1。或者是逻辑上的错误。我试着将TextOne的(alpha)tween时间设置为6,但还是搞砸了。

事实上,我不太确定在仔细考虑之后会发生什么。这没有逻辑意义。第一个alpha-tween很好,然后它在重复时出错,重复alpha-tween几次(但在错误的progress()位置),然后永远保持在0。以下是跟踪的快照:

α:0.0078125
进度:0.9979285714285714
中间:正确

α:0
进度:0.9992857142857144
中间:正确

α:0
进度:0.00028571428571438115
中间:正确

α:0
进度:0.000714285714285826
中间:false

α:0.99609375
进度:0.0015714285714287155
中间:false

α:0.1015625
进度:0.4504285714285715
中间:false

α:0.09765625
进展:0.4515714285714285
中间:false

α:0.00390625
进展:0.4992142857142858
中间:false

α:0
进度:0.5003571428571431

中间:false

只需使用两个
TweenMax.to()
调用。给一个
延迟:
参数和
持续时间的较小值

您可以将第一个TweenMax.to保存到TweenEvent.UPDATE事件,并为TweenEvent.UPDATE事件附加一个侦听器,这样您就可以得到一个函数,该函数在tweener每次更改值时调用

然后获取currentProgress的值,并检查该值是否高于0.5(这意味着它超过了二者之间的中间值),然后开始第二个二者之间的连接。你需要一个bool变量,所以你只需要在每个中间的孩子身上做一次

您可以为TweenEvent.REPEAT事件添加另一个侦听器,以便在tween重复时将alpha对象的值重置为1

var middle:Boolean = false;
TweenMax tween = TweenMax.to(textOne, 14, {x:xScreenPos - 150, ease:SlowMo.ease.config(1, 0), repeat:-1});
tween.addEventListener( TweenEvent.UPDATE, updateListener );
tween.addEventListener( TweenEvent.REPEAT, repeatListener );

function updateListener( e:TweenEvent ):void
{
  if( tween.currentProgress > 0.5 && middle == false )
  {
   TweenMax.to(textOne, 7, {ease:SlowMo.ease.config(1, 0), repeat:0, autoAlpha:0});
   middle = true;
  }
}

function repeatListener( e:TweenEvent ):void
{
 textOne.alpha = 1.0;
 middle = false;
}

希望这有帮助

我尝试过类似的方法:
TweenMax.to(textOne,timeVar,{x:xScreenPosEnd,ease:SlowMo.ease.config(1,0),重复:-1});TweenMax.to(textOne,(timeVar/2),{x:xScreenPosEnd,ease:SlowMo.ease.config(1,0),repeat:-1,autoAlpha:0,delay:(timeVar/2)}但发生的情况是,它不再从set x位置开始。使用两个TweenMax.to()调用似乎会使它们相互冲突。您不应该在两个tweens中都使用x:xScreenPosEnd。然后TweenMax将用第二个覆盖第一个。所以一个应该在x之间,另一个在alpha之间。我在第二个tween中删除了它,现在是:
TweenMax.to(textOne,7,{ease:SlowMo.ease.config(1,0),repeat:-1,autoAlpha:0,delay:7,repeatDelay:7})这是我的问题:我试图让文本在alpha 1开始时一直到中间(仍然是1),然后它将alpha 1从中间到结束x位置之间的距离变为alpha。这需要在每次重复正常的吐温运动时发生。只有
延迟:7
不起作用,因为它只运行一次。添加的
repeatDelay:7
希望它能够抵消以后的重复,但实际上没有。在所有剩余的重复时间间隔的前7秒内,它似乎仍然是alpha 0,然后在第7秒变为alpha 1,然后再次将alpha变为0。它出现了错误1071:语法错误:需要定义关键字(例如函数)在属性TweenMax之后,而不是tween。对于这行代码
TweenMax tween=TweenMax.to(textOne,14,{x:xScreenPos-150,ease:SlowMo.ease.config(1,0),重复:-1})
此外,是否可以使用UpdateListener和repeatListener的相同逻辑使其alpha不断淡入淡出?我或多或少地解决了这个问题。确切的是什么是
currentProgress
以及它在上面的代码中的位置?它出现了错误119:通过r访问可能未定义的属性currentProgress引用静态类型com.greensock:TweenMax。我已经更新了我的帖子以反映当前的情况。你知道为什么alpha不是真正的tweening吗?很抱歉,它应该是progress()而不是currentProgress,progress()应该返回这个特定循环上tween的当前位置totalProgress()另一方面,返回tween的位置,并考虑循环的数量,这就是为什么在代码中,alpha永远不会被tween,因为您希望它无限期地重复,我猜是totalProgress()总是返回0。我现在明白了。好吧,我解决了这个问题,但是alpha-tween逻辑出现了完全错误,我无法确定它是什么!我编辑了我的帖子来显示问题和调试跟踪。
var middle:Boolean = false;
TweenMax tween = TweenMax.to(textOne, 14, {x:xScreenPos - 150, ease:SlowMo.ease.config(1, 0), repeat:-1});
tween.addEventListener( TweenEvent.UPDATE, updateListener );
tween.addEventListener( TweenEvent.REPEAT, repeatListener );

function updateListener( e:TweenEvent ):void
{
  if( tween.currentProgress > 0.5 && middle == false )
  {
   TweenMax.to(textOne, 7, {ease:SlowMo.ease.config(1, 0), repeat:0, autoAlpha:0});
   middle = true;
  }
}

function repeatListener( e:TweenEvent ):void
{
 textOne.alpha = 1.0;
 middle = false;
}