当前位置: 首页 > 知识库问答 >
问题:

修改动画的时间JavaFX(时间线+插值器)

周越泽
2023-03-14

我最近读了一个关于JAVAFX的课程,我想制作一个应用程序来吸收我所学到的东西。我想做一个2D游戏,其中一个球是通过抛物线的方式动画。我对这两个对象使用timelineinterpolator。我必须承认,我不知道插值器到底是如何工作的,我的问题是我想让动画停止时,球到达窗口的底部。

我想用两种方法:

    null
Timeline t1 = new Timeline();
t1.setAutoReverse(false);
t1.setCycleCount(Timeline.INDEFINITE);
t1.getKeyFrames().addAll(
    new KeyFrame(new Duration(1000 * Tf),new KeyValue(this.centerXProperty(),0,new Interpolator(){
        protected double curve(double t){
            double resultat = coeffAngleX * t;
            return - resultat;
        }
    })),
    new KeyFrame(new Duration(1000 * Tf),new KeyValue(this.centerYProperty(),0,new Interpolator(){
        protected double curve(double t) {
            double resultat = (a * t * t)
                     + (coeffAngleY * t);
            return resultat;
        }
    }))
);
Timeline t1 = new Timeline();
t1.setAutoReverse(false);
t1.setCycleCount(1);

KeyValue xKvB = new KeyValue(this.centerXProperty(),xCenter);
KeyValue yKvB = new KeyValue(this.centerYProperty(),yCenter);

KeyValue xKvE = new KeyValue(this.centerXProperty(),500.0,new Interpolator(){
    protected double curve(double t){
        double resultat = coeffAngleX * t;
        System.out.println("X = " + centerXProperty().get());
        return resultat;
    }
});
KeyValue yKvE = new KeyValue(this.centerYProperty(),700.0,new Interpolator(){
   protected double curve(double t){
     double resultat = (a * t * t) + (coeffAngleY * t);
     System.out.println("Y = " + centerYProperty().get());
     return resultat;
   } 
});

KeyFrame KfB = new KeyFrame(Duration.ZERO,xKvB,yKvB);
KeyFrame KfE = new KeyFrame(Duration.seconds(1),xKvE,yKvE);


t1.getKeyFrames().addAll(KfB,KfE);
t1.play();

共有1个答案

徐晔
2023-03-14

对于这样的事情,我发现使用AnimationTimer比使用时间线更灵活。使用AnimationTimer,您可以直接实现这两种基本方法。你要么调用计时器的stop方法,要么在计时器方法中,当你到达结束条件时,你就停止推进球。

 类似资料:
  • 我想知道为什么我的图表每次移动后屏幕都不清晰。这是我的代码: MainClass,我想删除其中的“时间”,并将其放在绘图方法updateScene中的lambda表达式中,但还不知道如何做到这一点:/ Axes类描述如何绘制轴: 缩放和绘制图表中我需要的一切。 绘图课负责制作动画,精确绘制我想要的图形。 屏幕显示我编译后得到的内容。就像我自上而下的问题一样,不知道是什么原因导致在每个时间线阶段后不

  • 我一直试图在我的UI中添加一个动画到我的气泡图中,但遇到了一些问题。我试图在不同的阶段增加气泡的大小,以显示渐变,但它只是画出它的全部大小,而不是在每个阶段。 体育推特计数是泡沫的最终值,我将其除以不同的数量,以显示最终值的建立。 有人有什么想法为什么这不像我期望的那样工作吗?

  • 在一个区域表面上有很多图像。我把它们分成小组。它们应该水平滚动成链。在这里输入图像描述 我写了一些方法来工作。例如。在左边切换位置。(rects-rectangles。早先是rectangles)。 例如。将元素从中心移到左边。 等等。

  • 我目前正在创建一个非常简单的JavaFX程序,模拟城市之间运送乘客的飞机和船只。到目前为止,我已经能够让飞机在几个城市进行短途飞行,但问题是,当我添加超过3或4架飞机时,动画速度非常慢。 我正在做的是使用Timeline类作为我的主游戏循环,清除并重新绘制画布上每帧60帧的平面图像。以下是时间表部分: 以下是我如何为平面创建新线程: 这是Plane类中定义的run()方法: 我知道代码非常混乱,但

  • 我是非常非常新的写代码,但我希望有人可以帮助我与我的头脑中的几个函数! 我在Edge animate中制作了一个按钮,我想在操作中添加一些jQuery或额外的代码。 理想情况下(作为额外的),我真的希望它在交替点击时在两种状态之间切换。所以,点击1:从(a)点播放,点击2:从(b)点播放。...(a),(b),(a),(b),无限!然后整个事情应该在Mouseout上重置!! 那可能要做很多工作,

  • motioncfp.java: