下面的代码,使用TweenMax的onUpdate方法
this.detaibaseInfo2 = new Sprite();
with (detaibaseInfo2) {
x = 30;
y = 700;
with (graphics) {
beginFill(0x826b45, 1);
drawRect(0, 0, 240, 20);
endFill();
}
}
addChild(detaibaseInfo2);
TweenMax.to(detaibaseInfo2, 0.2, {y:260, onUpdate:detaibaseInfo2Update,ease:Strong.easeOut});
但是测试了一下:
private function detaibaseInfo2Update():void {
trace("detaibaseInfo2.y="+detaibaseInfo2.y);
if (detaibaseInfo2.y < 270) {
other code ...
}
}
输出的结果是:
[trace] detaibaseInfo2.y=399.7
[trace] detaibaseInfo2.y=399.7
[trace] detaibaseInfo2.y=399.7
[trace] detaibaseInfo2.y=399.7
[trace] detaibaseInfo2.y=399.7
[trace] detaibaseInfo2.y=291.45
[trace] detaibaseInfo2.y=263.25
[trace] detaibaseInfo2.y=260.05
[trace] detaibaseInfo2.y=260
有个疑惑: 为什么 detaibaseInfo2 的 y 属性数值不是从 700 到 260 的递减呢?
对于你输出的结果,居然有几个值是一样的,
我尝试你的代码,输出如下
detaibaseInfo2.y=678.4
detaibaseInfo2.y=428.15
detaibaseInfo2.y=354.35
detaibaseInfo2.y=285.3
detaibaseInfo2.y=271.8
detaibaseInfo2.y=261.55
detaibaseInfo2.y=260.3
detaibaseInfo2.y=260
detaibaseInfo2.y=260
可能的原因:
- 你swf输出设置的帧频太小
- 尝试换掉
Strong
,用比如Expo
来获取跳跃没那么大的缓动 - 如果真的是处理其他脚本影响了动画的执行,尝试替换
TweenMax
为Tweenlite
来提高效率
Greensock的文档中有提到对ease强度的分级,从0到4,strong是4,是加速度最强的easing,在你只tween了0.2秒的动画中,这么强的加速度当然会造成数值的剧烈变动,你想,整个动画才0.2秒时间结束,总共才trace了9次,对象在0.2秒内以最高的加速度移动440像素,那当然一下子就得跳过一半距离了……亲你急速堆太高了……
如果你说为什么第一条不是700,因为是先update再trace的,trace出来的永远是本次update完成时的y值
正文完