2015-04-05 56 views
0

所以我想创建一个雪人,并动画它的左右手臂,我已经看了Oracle文档,并试图尽可能地写我的时间以尽可能如何设置它。问题与时间轴动画

以供参考,这是代码示例中,我一直在寻找:

final Rectangle rectBasicTimeline = new Rectangle(100, 50, 100, 50); 
rectBasicTimeline.setFill(Color.RED); 
... 
final Timeline timeline = new Timeline(); 
timeline.setCycleCount(Timeline.INDEFINITE); 
timeline.setAutoReverse(true); 
final KeyValue kv = new KeyValue(rectBasicTimeline.xProperty(), 300); 
final KeyFrame kf = new KeyFrame(Duration.millis(500), kv); 
timeline.getKeyFrames().add(kf); 
timeline.play(); 

现在,这里是我创建的左臂代码,(如果它的工作),其动画。我的缺陷在哪里,我该如何解决它?

private void drawLeftArm(GraphicsContext gc) 
    { 
     leftArm = new Ellipse(); 
     leftArm.setCenterX(90.0); 
     leftArm.setCenterY(160.0); 
     leftArm.setRadiusX(100.0); 
     leftArm.setRadiusY(30.0); 

     gc.setFill(Color.AQUAMARINE); 
     gc.fillOval(leftArm.getCenterX(), leftArm.getCenterY(),  leftArm.getRadiusX(), leftArm.getRadiusY()); 

     timeLine = new Timeline(); 
     timeLine.setCycleCount(Timeline.INDEFINITE); 
     timeLine.setAutoReverse(true); 


     KeyValue LeftValue = new KeyValue(leftArm.centerYProperty(), 100); 
     KeyFrame keyFrame = new KeyFrame(Duration.millis(1000), LeftValue); 

     timeLine.getKeyFrames().addAll(keyFrame); 
     timeLine.play(); 

    } 

回答

0

在您发布的代码,您创建leftArm,但并没有将其添加到场景图。因此,它是动画,但不可见。上述fillOval调用等效于

gc.fillOval(90.0, 160.0, 100.0, 30.0); 

在这个意义上,它并没有leftArm任何引用。所以你做了两件(独立的)事情:在画布上画一个椭圆并开始一个不可见椭圆的动画。

对于动画,请勿使用Canvas/GraphicsContext。只需使用GroupPane作为动画节点的父项。

+0

我明白了,非常感谢您的建议=) – SomeStudent 2015-04-05 07:12:24