JavaFX的新手,仍然试图找出一个缩小的靶心应用程序

时间:2018-01-27 20:34:57

标签: java animation javafx

到目前为止,我的应用程序中的所有内容都正常

功能: 将出现靶心,然后一旦点击了animate me按钮,靶心内的前三个圆圈将缩小。然后将以交替的颜色创建新的圆圈。

问题: 到目前为止,除了我试图实现的暂停和播放功能外,一切正常。当用户按下中间的停止按钮时,我计划停止使用靶心,但是在没有打嗝,没有跳过圈子等的情况下将其拉到任何地方,就像我说的那样,我是公平的。这是新手,所以我只是想知道问题是否我没有使用时间轴课程来尝试管理它的暂停和播放方式?或者是最后两个事件处理程序(btn.setOnMousedPressed和btn.setOnMouseReleased)的问题以及for循环没有达到某个索引?

感谢您的帮助!

        public class BullsEye extends Application 
{
    Circle[] cir = new Circle[100];
    Button btn = new Button("Animate me!");
    StackPane root = new StackPane();

    public static void main(String[] args) 
    {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) 
    {
        root.setStyle("-fx-border-color:black;");      

        cir[0] = new Circle(400, 250, 200);
        cir[0].setFill(Color.RED);
        cir[0].setStyle("-fx-border-color:black;");

        cir[1] = new Circle(315, 165, 115);
        cir[1].setFill(Color.WHITE);
        cir[1].setStyle("-fx-border-color:black;");

        cir[2] = new Circle(230, 80, 30);
        cir[2].setFill(Color.RED);
        cir[2].setStyle("-fx-border-color:black;");

        root.getChildren().addAll(cir[0], cir[1], cir[2]);      
        root.getChildren().add(btn);      

        primaryStage.setScene(new Scene(root));
        primaryStage.show();

        btn.setOnAction(e ->
        {
            animation();
            btn.setText("Press to Stop");
        });
    }

    public void animation()
    {
        ScaleTransition[] st = new ScaleTransition[100];

        st[0]= new ScaleTransition(Duration.seconds(7), cir[0]);
        st[0].setToX(0.0f);
        st[0].setToY(0.0f);
        st[0].play();

        st[1] = new ScaleTransition(Duration.seconds(5.5), cir[1]);
        st[1].setToX(0.0f);
        st[1].setToY(0.0f);
        st[1].play();

        st[2] = new ScaleTransition(Duration.seconds(4), cir[2]);
        st[2].setToX(0.0f);
        st[2].setToY(0.0f);
        st[2].play();

       // int delayInc = 1;
        int delay = 1;


        for(int i = 3; i<st.length; i++)
        {     
            if(i % 2 == 1)
            {
                cir[i] = new Circle(400,250,200);
                cir[i].setFill(Color.WHITE);
                cir[i].setStyle("-fx-border-color:black;");
                root.getChildren().add(cir[i]);
                cir[i].toBack();

                st[i] = new ScaleTransition(Duration.seconds(7), cir[i]);
                st[i].setDelay(Duration.seconds(delay));

                delay++;
                st[i].setToX(0.0f);
                st[i].setToY(0.0f);
                st[i].play();
            }

            else if(i%2==0)
            {
                cir[i] = new Circle(400, 250, 200);
                cir[i].setFill(Color.RED);
                cir[i].setStyle("-fx-border-color:black;");
                root.getChildren().add(cir[i]);
                cir[i].toBack();

                st[i] = new ScaleTransition(Duration.seconds(7), cir[i]);
                //st[i].setDuration(Duration.seconds(7));
                //st[i].setNode(cir[i]);
                st[i].setDelay(Duration.seconds(delay));
                delay++;
                st[i].setToX(0.0f);
                st[i].setToY(0.0f);
                st[i].play();
            }
        }

        btn.setOnMousePressed(event ->
        {
            for(int x = 0; x<st.length;x++)
            st[x].pause();

            btn.setText("Release to Resume");
        });    

        btn.setOnMouseReleased(event -> 
        {
            for(int y = 0; y<st.length;y++)
            st[y].play();
        });
    }  
}

0 个答案:

没有答案