在文本javafx中显示变量值

时间:2015-12-29 16:06:09

标签: java javafx-8

这是我的第一个问题,我是编程新手。我希望这个问题不会让你感到无聊。

我正在用Java编写一个用于学校项目的Snake游戏版本。我正在使用javafx。

每次头部吃苹果时,都会出现文字并消失。本文包括分数(吃掉苹果的增量)。

文本显示并消失得很好,但分数总是显示值" 0",虽然它的值不是0(我可以通过在控制台中打印分数看到)。

我试图创建一个IntValue类来以另一种方式调用得分的值,但它没有用。

public class MainGame extends Application {

    Snake snake = new Snake();
    Apple apple = new Apple();
    public static final int width = 200;
    public static final int height = 200;
    public static int score;
    private Text tEat = new Text();

public void start(Stage primaryStage) {

    Pane layout = new Pane();
    ObservableList<Node> components = layout.getChildren(); //creates a list of nodes and adds them to pane

    components.add(snake); //snake added to pane
    components.add(apple); //apple added to pane
    components.add(tEat); //text added to pane
    tEat.setText("GG! " + score);
    tEat.setFont(Font.font(STYLESHEET_MODENA, FontWeight.BOLD, 20));
    tEat.setY(height/2);
    tEat.setX(width/2 - 40);
    tEat.setFill(Color.GREEN);
    tEat.setOpacity(0);

Timeline timeline = new Timeline(new KeyFrame(Duration.millis(100), ev -> {
        snake.move();

        if (snake.collides(apple)) {
            score++; //score is incremented but not updated in tEat
            fader(tEat); //tEat text appears and fades away
            snake.eat(apple);
            components.remove(apple);
            apple = new Apple();
            components.add(apple);
        }
    }));
    timeline.setCycleCount(Animation.INDEFINITE);
    timeline.play();

1 个答案:

答案 0 :(得分:2)

您可以创建一个绑定,它会自动更新。

创建:

tEat.setText("GG! " + score);

然后创建一个绑定。

而不是:

tEat.textProperty().bind(Bindings.createStringBinding(() -> ("GG! " + score.get(), score));

使用此:

score++; 

而不是:

score.set(score.get() + 1);

使用此:

{{1}}

这将绑定您的值,以便无论何时更新该属性,它都将更新。