Java 二元运动速度控制

Java 二元运动速度控制,java,libgdx,tween,Java,Libgdx,Tween,我使用tween引擎来平滑移动实体的路径。要使插值功能如下所示: Tween.to(myObject,位置,1.0f) .目标(50、70) .ease(Quad.INOUT) .启动(myManager) to()函数的最后一个参数是duration。据我所知,如果路径较长,实体将更快地移动到目标。路径越短,实体移动越慢。我有一个叫做movementSpeed的浮点变量,在每个实体中,它应该每秒移动实体7个像素。使用我的变量作为tween的移动速度,而不是在工厂构造函数中指定一次,是什么方法

我使用tween引擎来平滑移动实体的路径。要使插值功能如下所示:

Tween.to(myObject,位置,1.0f)
.目标(50、70)
.ease(Quad.INOUT)
.启动(myManager)

to()
函数的最后一个参数是duration。据我所知,如果路径较长,实体将更快地移动到目标。路径越短,实体移动越慢。我有一个叫做movementSpeed的浮点变量,在每个实体中,它应该每秒移动实体7个像素。使用我的变量作为tween的移动速度,而不是在工厂构造函数中指定一次,是什么方法

我的实施:

Stack<Vector2i> stack = new Stack<Vector2i>();
/* ...pushing path points from last to first to the stack. */


Tween t = Tween.to(this, EntityAccessor.POS, 4.0f);
for (int i = stack.size()-1; i >= 0; i--) {
    Vector2i cur = stack.get(i);
    if (i == 0) {    // if point is last then
        t.target(cur.getX(), cur.getY());
    } else {
        t.waypoint(cur.getX(), cur.getY());
    }           
}

t.ease(Quad.INOUT);
t.path(TweenPaths.catmullRom);
t.delay(0.5f);
t.start(game.tweenManager);
Stack Stack=新堆栈();
/*…将路径点从最后一个推到第一个到堆栈*/
Tween t=Tween.to(这是EntityAccessor.POS,4.0f);
对于(int i=stack.size()-1;i>=0;i--){
Vector2i cur=stack.get(i);
若(i==0){//若点是最后一个,则
t、 目标(cur.getX(),cur.getY());
}否则{
t、 航路点(cur.getX(),cur.getY());
}           
}
t、 ease(Quad.INOUT);
t、 路径(TweenPaths.catmullRom);
t、 延迟(0.5f);
t、 开始(game.tweenManager);

我不需要硬编码持续时间,您可以计算它

i、 e.您始终可以使用

距离=sqrt(dx*dx+dy*dy)

现在有了距离和速度,您可以将持续时间设置为距离/速度


希望这有帮助。

一旦创建了tween,并使用工厂方法tween.to(…)设置了它的持续时间,我认为没有办法改变它的持续时间。我建议使用速度并在每一帧更新它,以获得您想要的效果。拥有一个设定的速度或每帧计算一次速度,无论如何都无法达到吐温的目的。

谢谢你让我知道吐温不是我需要的。