什么时候应该是我的循环的条件

时间:2017-01-02 19:43:13

标签: java javafx

在我的程序中,当我的两个矩形匹配时,分数增加1。但它只能工作一次。我知道我需要在我的程序中加一个循环,我只是遇到一些麻烦应该是什么条件。而不是if语句我放了一个while()循环,它仍然无法正常工作。请帮忙。你会看到问题的起点,我会发表评论。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.scene.control.*;
import javafx.event.Event;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.shape.*;
import javafx.scene.paint.Color;
import javafx.animation.PathTransition;
import javafx.animation.Timeline;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.util.Duration;
import java.lang.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.animation.FadeTransition;
import javafx.geometry.Bounds;

public class TransoFo extends Application{
    public void start(Stage stage) {
        Pane p = new Pane();
        Button b = new Button("Play");
        b.setStyle("-fx-background-radius: 3em;" + 
                "-fx-background-color: #66a3ff;" +
                "-fx-min-width: 120;" +
                "-fx-min-height: 40;" +
                "-fx-max-width: 120;" +
                "-fx-min-height: 40;" +
                "-fx-cursor: hand;" + 
                "-fx-text-fill: white;");
        b.setLayoutX(307);
        b.setLayoutY(400);



             Circle bi = new Circle();
            Rectangle biRec = new Rectangle();
            Circle circle = new Circle();
            Rectangle rec = new Rectangle();

            rec.setWidth(20);
            rec.setHeight(30);

            rec.setArcWidth(5);
            rec.setArcHeight(5);
            rec.setStyle("-fx-fill: #ff9933;" +
                    "-fix-stroke-width: 20;" +
                    "-fix-stroke: #ff4d4d;");


            circle.setStyle("-fx-fill: #88ff4d;" +
                    "-fx-stroke-width: 12;" +
                    "-fx-stroke: #3399ff;");
            circle.setCenterX(370);
            circle.setCenterY(250);
            circle.setRadius(50);

            biRec.setWidth(30);
            biRec.setHeight(20);
            biRec.setArcWidth(5);
            biRec.setArcHeight(5);
            biRec.setStyle("-fx-fill: #ff9933;" +
                    "-fix-stroke-width: 20;" +
                    "-fix-stroke: #ff4d4d;");

            bi.setStyle("-fx-fill: #88ff4d;" +
                    "-fx-stroke-width: 12;" +
                    "-fx-stroke: #3399ff;");
            bi.setCenterX(370);
            bi.setCenterY(250);
            bi.setRadius(100);
            p.getChildren().addAll(bi, biRec, circle, rec);
            // transition for small circle and rectangle
            PathTransition pt1 = new PathTransition();
            pt1.setDuration(Duration.millis(1200));
            pt1.setPath(bi);
            pt1.setNode(biRec);
            pt1.setOrientation(PathTransition.OrientationType.ORTHOGONAL_TO_TANGENT);
            pt1.setCycleCount(Timeline.INDEFINITE);
            pt1.setAutoReverse(false);

           pt1.play();
                    // next path transition
             PathTransition pt3 = new PathTransition();
            pt3.setDuration(Duration.millis(800));
            pt3.setPath(circle);
            pt3.setNode(rec);
            pt3.setOrientation(PathTransition.OrientationType.ORTHOGONAL_TO_TANGENT);
            pt3.setCycleCount(Timeline.INDEFINITE);
            pt3.setAutoReverse(false);

           pt3.play();


        b.setOnAction((ActionEvent event) -> {
            bi.setVisible(false);
            biRec.setVisible(false);
            circle.setVisible(false);
            rec.setVisible(false);
                 b.setVisible(false);     
            Circle big = new Circle();

            Rectangle bigRec = new Rectangle();
            Circle circ = new Circle();
            Rectangle r = new Rectangle();

            r.setWidth(20);
            r.setHeight(30);


            r.setArcWidth(5);
            r.setArcHeight(5);
            r.setStyle("-fx-fill: #ff9933;" +
                    "-fix-stroke-width: 20;" +
                    "-fix-stroke: #ff4d4d;");

            circ.setStyle("-fx-fill: #88ff4d;" +
                    "-fx-stroke-width: 12;" +
                    "-fx-stroke: #3399ff;");
            circ.setCenterX(370);
            circ.setCenterY(300);
            circ.setRadius(50);


            bigRec.setWidth(30);
            bigRec.setHeight(20);
            bigRec.setArcWidth(5);
            bigRec.setArcHeight(5);
            bigRec.setStyle("-fx-fill: #ff9933;" +
                    "-fix-stroke-width: 20;" +
                    "-fix-stroke: #ff4d4d;");

            big.setStyle("-fx-fill: #88ff4d;" +
                    "-fx-stroke-width: 12;" +
                    "-fx-stroke: #3399ff;");
            big.setCenterX(370);
            big.setCenterY(300);
            big.setRadius(100);


            PathTransition pt2 = new PathTransition();
            pt2.setDuration(Duration.millis(1200));
            pt2.setPath(big);
            pt2.setNode(bigRec);
            pt2.setOrientation(PathTransition.OrientationType.ORTHOGONAL_TO_TANGENT);
            pt2.setCycleCount(Timeline.INDEFINITE);
            pt2.setAutoReverse(true);

            pt2.play();

            PathTransition pt = new PathTransition();
            pt.setDuration(Duration.millis(800));
            pt.setPath(circ);
            pt.setNode(r);
            pt.setOrientation(PathTransition.OrientationType.ORTHOGONAL_TO_TANGENT);
            pt.setCycleCount(Timeline.INDEFINITE);
            pt.setAutoReverse(false);

            pt.play();     


            Button b2 = new Button(" | | ");
              b2.setStyle("-fx-background-radius: 3em;" + 
                "-fx-background-color: #66a3ff;" +
                "-fx-min-width: 70;" +
                "-fx-min-height: 40;" +
                "-fx-max-width: 700;" +
                "-fx-min-height: 40;" +
                "-fx-cursor: cursor;" + 
                "-fx-text-fill: white;");
        b2.setLayoutX(670);
        b2.setLayoutY(10);

        b2.setOnAction((ActionEvent event1) -> {
            pt2.stop();
            pt.stop();
            });                

       Button b3  = new Button(" ▶ ");
        b3.setStyle("-fx-background-radius: 3em;" + 
                "-fx-background-color: #66a3ff;" +
                "-fx-min-width: 70;" +
                "-fx-min-height: 40;" +
                "-fx-max-width: 700;" +
                "-fx-min-height: 40;" +
                "-fx-cursor: hand;" + 
                "-fx-text-fill: white;");
                   b3.setLayoutX(590);
                   b3.setLayoutY(10);

                   b3.setOnAction((ActionEvent event2) -> {
                                pt.play();
                                pt2.play();

                            });     
            Button match = new Button(" Match ");
             match.setStyle("-fx-background-radius: 3em;" + 
                "-fx-background-color: #66a3ff;" +
                "-fx-min-width: 120;" +
                "-fx-min-height: 40;" +
                "-fx-max-width: 120;" +
                "-fx-min-height: 40;" +
                "-fx-cursor: hand;" + 
                "-fx-text-fill: white;");
                match.setLayoutX(310);
             match.setLayoutY(450);         

             match.setOnAction((ActionEvent evt) -> {

                     Bounds bBounds = bigRec.getBoundsInParent();
                     Bounds bounds = r.getBoundsInParent();


                     // problem starts here
                        int total = 0;
                  if (bounds.getMinY() <= bBounds.getMaxY() && bounds.getMaxY() >= bBounds.getMinY()) {
                      total += 1;
                       String str = Integer.toString(total);
                         Label score = new Label(str);
                         score.setFont(new Font("Courier New bold", 20));
                          score.setLayoutX(100);
                          score.setLayoutY(200);
                          p.getChildren().add(score);

                          pt.stop();
                          pt2.stop();   
                            try {
                               Thread.sleep(1000);
                            pt.play();
                          pt2.play();
                       } 
                            catch (Exception e) {}
              }
//              end the event
        });

                p.getChildren().addAll(big, bigRec, circ, r, b2, b3, match);

          FadeTransition ft = new FadeTransition(Duration.millis(1500), big);
          ft.setFromValue(0.1);
          ft.setToValue(1);
          ft.play();
            //transition for big rec
          FadeTransition ft2 = new FadeTransition(Duration.millis(1500), bigRec);
          ft2.setFromValue(0.1);
          ft2.setToValue(1);
          ft2.play();
            //transition for  circ
          FadeTransition ft3 = new FadeTransition(Duration.millis(1500), circ);
          ft3.setFromValue(0.1);
          ft3.setToValue(1);
          ft3.play();
            //transition for r
          FadeTransition ft4 = new FadeTransition(Duration.millis(1500), r);
          ft4.setFromValue(0.1);
          ft4.setToValue(1);
          ft4.play();
            //transition for match
          FadeTransition ft5 = new FadeTransition(Duration.millis(1500), match);
          ft5.setFromValue(0.1);
          ft5.setToValue(1);
          ft5.play();
            //transition for pause button
          FadeTransition ft6 = new FadeTransition(Duration.millis(3000), b2);
          ft6.setFromValue(0.1);
          ft6.setToValue(1);
          ft6.play();
            //transtion for play button
          FadeTransition ft7 = new FadeTransition(Duration.millis(3000), b3);
          ft7.setFromValue(0.1);
          ft7.setToValue(1);
          ft7.play();

        });

        p.getChildren().add(b);
        p.setStyle("-fx-background-color: #88ff4d;");
        Scene s = new Scene(p, 750, 650);
        stage.setResizable(false);
        stage.setScene(s);
        stage.show(); 
    }
    // launch Application
    public static void main(String[] args) {
        Application.launch(args);
    }  
}

1 个答案:

答案 0 :(得分:1)

移动变量total,如下所示:

public class TransoFo extends Application {
    private int total;
    public void start(Stage stage) {

从:

// problem starts here 
if (bounds.getMinY() <= bBounds.getMaxY() && bounds.getMaxY() >= bBounds.getMinY()) { 
    total += 1;

但是,您仍然需要修改总计显示的方式。它覆盖了以前的总数

enter image description here

希望这有帮助。