我正在为我当前的项目使用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()
不能以足够的精度返回当前时钟时间。
有什么办法可以改进我的代码吗?