0

我正在为我当前的项目使用Loom SDK - 它的语法是 AS3 和 .NET 之间的混合。我试图沿着贝塞尔曲线移动一个对象(我不能使用 Greensock 等,因为它不适用于 Loom)。

这是代码:

public override function onFrame(): void    {

        var t:Number = ( Platform.getTime() - _startTime) / _duration;

        if (t < 1) {
            var newPos = curveBetweenTwoPoint(_start, _dest, _bezier, t);
            _entity.x = newPos.x;
            _entity.y = newPos.y;
        } else {
            // finished!
            if (_finishCallback != null) {
                _finishCallback();
            }
        }
    }

public function curveBetweenTwoPoint(start:Point, dest:Point, bezier:Point, t:Number) : Point {
        var x:Number = (  (1-t)*(1-t)*start.x + 2*(1-t)*t*bezier.x+t*t*dest.x);
        var y:Number = (  (1-t)*(1-t)*start.y + 2*(1-t)*t*bezier.y+t*t*dest.y);

        return new Point(x, y);
    }

这基本上是随时间插值对象的 (x,y) 坐标。但是,一旦持续时间小于 1 秒,动画就会非常生涩——我怀疑这是因为它Platform.getTime()不能以足够的精度返回当前时钟时间。

有什么办法可以改进我的代码吗?

4

0 回答 0