1

我正在尝试创建一个简单的动画,在 JavaFX 2.x 中将圆圈向左移动一个像素,动画有效,但每当我尝试第二次启动时,它就不再有效了。我已经尝试了几件事,这是代码:

public void handle(KeyEvent t) {
    if (t.getCode() == KeyCode.LEFT) {
        final KeyValue kv = new KeyValue(testPuck.translateXProperty(), -1); 
        final KeyFrame kf = new KeyFrame(Duration.millis(50), kv);
        timeLineToLeft.getKeyFrames().add(kf);
        timeLineToLeft.play();
    }
}

我尝试检查时间线是否不等于 null,然后删除关键帧/键值并再次添加它们。但这也无济于事。对这个问题有任何帮助吗?关于这个主题的文档似乎很少。提前致谢。

4

1 回答 1

1

您的动画只有一个KeyFrame- 最后一个,testPuck位于 -1 点。因此,在第二次调用之后,您添加了 new KeyFrame,它将 puck 从点 -1 移动到点 -1 并且没有任何反应。

接下来试试:

注意我Timeline每次都重新创建,没有理由保留它:

public void handle(KeyEvent t) {
    if (t.getCode() == KeyCode.LEFT) {
       Timeline timeLineToLeft = new Timeline();
       final KeyValue kv = new KeyValue(testPuck.translateXProperty(), 
            testPuck.getTranslateX() -1);  // note we calculate new value every time
       final KeyFrame kf = new KeyFrame(Duration.millis(50), kv);
       timeLineToLeft.getKeyFrames().add(kf);
       timeLineToLeft.play();
}

如果你真的想重用Timeline对象,请先清除它:

    timeLineToLeft.getKeyFrames().clear();
    //...
    timeLineToLeft.playFromStart();
于 2012-10-21T13:54:54.670 回答