我在AS3中使用GreenSock的TweenMax,在iOS上使用Flash AIR 3.2。我正在尝试获取一串文本,以便在补间移动期间使用autoAlpha
插件在某个点(例如在它到达补间的中间之后)开始淡入淡出,而不是从开始到结束。目前它正在补充两者从开始位置到完成的移动和alpha。这可能吗?
TweenMax.to(textOne, 14, {x:xScreenPos - 150, ease:SlowMo.ease.config(1, 0), repeat:-1, autoAlpha:0.5});
编辑:这是当前的代码,其功能和语法已修复,但由于某些原因它不起作用。仍有一个补间运动,但alpha不再补间了。但逻辑似乎是正确的。 (alpha
现在替换autoAlpha
,因为它适用于后者。)
import com.greensock.events.TweenEvent;
import com.greensock.TweenMax;
var _middle:Boolean = false;
var _tween:TweenMax;
public function run():void {
_tween = TweenMax.to(textOne, 14, {x:xScreenPosEnd, 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.totalProgress() > 0.5 && _middle == false) {
TweenMax.to(textOne, 7, {ease:SlowMo.ease.config(1, 0), repeat:-1, alpha:0});
_middle = true;
}
}
function repeatListener(e:TweenEvent):void {
textOne.alpha = 1.0;
_middle = false;
}
编辑:totalProgress()
已被progress()
和alpha补间替换 - 但是alpha补间还存在另一个问题。我已经跟踪textOne.alpha
和_tween.progress()
进行调试。要么是因为AS3的单线程特性,它会在每个循环结束时搞乱调用逻辑...因为有一个延迟结束的alpha补间,REPEAT调用不能将alpha设置为1 ,在补间开始之前。或者它是逻辑中的错误。我尝试将TextOne的(alpha)补间时间设置为6,但它仍然会混淆它。
实际上,我不太确定在考虑它之后发生了什么。它没有逻辑意义。第一个alpha补间很好,然后它会重复并重复alpha补间(但在错误的进度()位置)几次,然后永远保持在0。这是跟踪的快照:
ALPHA:0.0078125
进展:0.9979285714285714
中:真的
...
阿尔法:0
进展:0.9992857142857144
中:真的
ALPHA:0
进展:0.00028571428571438115
中:真的
ALPHA:0
进展:0.000714285714285826
中:虚假
ALPHA:0.99609375
进展:0.0015714285714287155
中:假
...
阿尔法:0.1015625
进展:0.4504285714285715
中:虚假
ALPHA:0.09765625
进展:0.4515714285714285
中:假
...
阿尔法:0.00390625
进展:0.4992142857142858
中:虚假
ALPHA:0
进展:0.5003571428571431
中:虚假
答案 0 :(得分:1)
只需使用两个TweenMax.to()
来电。为delay:
提供一个duration
参数和一个较小的值。
答案 1 :(得分:0)
您可以保存第一个TweenMax.to并为TweenEvent.UPDATE事件附加一个侦听器,这样您就可以获得每次tweener更改值时调用的函数。
然后获取currentProgress的值并检查该值是否大于0.5(这意味着它超过了补间的中间)并启动第二个补间。你需要一个bool变量,所以你只需要每中间补间一次。
您可以为TweenEvent.REPEAT事件添加另一个侦听器,以便在补间重复时可以将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;
}
希望这有帮助