【发布时间】:2018-02-07 05:00:49
【问题描述】:
我正在不同程度地画一条圆形线。我希望动画持续大约 0.5 秒。由于某些原因,我无法计算出它的运行速度非常慢。
奇怪的是,如果我跳过补间并调用函数 tweenToNext,它会立即呈现。
var degrees:int;
var posX:int = 102;
var posY:int = 102;
var rad:int = 100;
var mc:MovieClip = new MovieClip();
addChild(mc);
mc.graphics.lineStyle(5, 0xFF0000, 1);
mc.graphics.moveTo(posX, posY - rad)
mc.i = -Math.PI / 2;
tweenToNext();
function tweenToNext(per:Number = 360):void {
degrees += 1;
if (mc.i <= (3 * Math.PI / 2) && degrees < per) {
var x:Number = posX + Math.cos(mc.i) * rad;
var y:Number = posY + Math.sin(mc.i) * rad;
mc.graphics.lineTo(x, y);
mc.i += Math.PI / 180;
TweenLite.to(mc, 0.001, {onComplete:tweenToNext});
}
}
我尝试过 Timer 和 setTimeout,但它们的速度相同。
【问题讨论】:
-
矢量路径越复杂,渲染越慢。我建议要么查看drawPath(),这应该更有效,或者使用 BitmapData 实例来绘制线条。
-
另外请不要嵌套函数,你可能会误以为它们依赖于外部声明的变量。
-
Organis 是在正确的轨道上,但我有一个建议。而不是补间 0.0001 毫秒(现在来吧;)),根据您的帧速率进行补间。如果您的 FPS 为 30,则一帧需要 33.3 毫秒。
标签: actionscript-3 actionscript