这是我的第一个问题,我是编程新手。我希望这个问题不会让你感到无聊。
我正在用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();
答案 0 :(得分:2)
您可以创建一个绑定,它会自动更新。
创建:
tEat.setText("GG! " + score);
然后创建一个绑定。
而不是:
tEat.textProperty().bind(Bindings.createStringBinding(() -> ("GG! " + score.get(), score));
使用此:
score++;
而不是:
score.set(score.get() + 1);
使用此:
{{1}}
这将绑定您的值,以便无论何时更新该属性,它都将更新。