对于学校作业,我们必须编写一个小型蛇游戏。一切正常,但有时最终游戏屏幕不显示并吐出此错误:
2019年6月9日晚上11:25:27 javafx.scene.CssStyleHelper computeValue 警告:在样式表jrt中从规则'* .label'解析'-fx-text-fill'时无法解析'-fx-text-background-color',而在jrt:/javafx.controls/com/sun/javafx/scene中/control/skin/modena/modena.bss
这对我来说似乎很奇怪,因为它并不时常这样做,只是时不时地这样做。我的问题是此错误意味着什么,以及可能如何解决。我真的不能显示代码,因为我的学校对共享作业非常严格,但是我希望这是足够的信息,以便至少告诉我该错误的原因。
我在下面添加了一些示例,它可能无法准确复制,但是确实提供了一些有关我在做什么的想法。
另一条有用的信息可能是使用AnimationTimer不断更新DrawPane。
import controller.Controller;
import javafx.geometry.Pos;
import javafx.scene.control.Label;
import javafx.scene.layout.Background;
import javafx.scene.layout.BackgroundFill;
import javafx.scene.layout.FlowPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
public class GameOverScene extends FlowPane {
private Label timeAlive;
// constructor
public GameOverScene(Controller controller) {
setAlignment(Pos.TOP_CENTER);
setBackground(new Background(new BackgroundFill(Color.rgb(197, 0, 41), null, null)));
VBox content = new VBox();
content.setAlignment(Pos.TOP_CENTER);
Label gameOverMessage = new Label("Game Over");
gameOverMessage.setFont(new Font("Arial", 40));
timeAlive = new Label(controller.getTimerTime());
timeAlive.setFont(new Font("Arial", 35));
timeAlive.setTextFill(Color.WHITE);
content.getChildren().addAll(gameOverMessage, timeAlive);
getChildren().add(content);
}
public void setTimerTime(String time) {
timeAlive.setText(time);
}
}
public class GameScene extends Scene {
// variables
private DrawPane drawPane;
private BorderPane root;
private DashBoard dashBoardPane;
private GameOverScene gameOver;
private Controller controller;
// constructor
public GameScene(double width, double height, Controller controller, Game game) {
super(new Pane());
this.controller = controller;
root = new BorderPane();
drawPane = new DrawPane(this, game);
dashBoardPane = new DashBoard(controller);
gameOver = new GameOverScene(controller);
root.setCenter(drawPane);
root.setBottom(dashBoardPane);
setRoot(root);
}
public void switchToGameOver() {
gameOver.setTimerTime(controller.getTimerTime());
setRoot(gameOver);
}
}