我最近读了一篇关于JAVAFX的课程,我想要一个应用程序来同化我学到的东西。
我想做一个2D游戏,其中一个球通过抛物线方式进行动画制作。
我正在使用这两个对象Timeline
和Interpolator
。
我必须承认,我不知道Interpolator
的工作原理是什么,我的问题是当球到达窗户底部时,我想让动画停止。
我考虑过使用两种方法:
Circle
)大于或等于窗户的高度时停止动画,但我不知道如何做到这一点Tf
停止动画,我得到一个公式,知道球何时与目标相交,但我不知道如何定义一个结束时间动画。如果可能,我想对这两种方法做出回应:)
这是我的Timeline
代码:
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;
}
}))
);
修改:
好的,我在你给我的链接上阅读了所有内容,我现在明白了KeyValue
的第二个参数是endValue
!
现在看一下这个例子,我将(X,Y)的结束值设置为(500,700),但是在打印centerXProperty和centerYProperty的值时看看我在控制台中得到的结果:
这是我的新代码:
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();