我正在使用Loom SDK作为我当前的项目 - 它的语法是AS3和.NET之间的混合。我试图沿Bézier曲线移动一个物体(我不能使用Greensock等,因为它不适用于织机)。
以下是代码:
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()
没有以足够的精度返回当前时钟时间。
有什么方法可以改进我的代码吗?