Я использую Java FX (Требуется для проекта класса), и я изо всех сил стараюсь отформатировать свой MVC, чтобы я мог загрузить несколько представлений на сцену (различные сцены). У меня есть контроллер, как показано ниже, который имеет 2 экземпляра View1.
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.animation.AnimationTimer;
public class Controller extends Application {
public int page = 0;
private View1 view2;
private View1 view1;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage theStage) {
view1 = new View1(theStage);
view2 = new View1(theStage);
new AnimationTimer() {
public void handle(long currentNanoTime)
{
switch (page){
case 0:
view1.update();
break;
case 1:
view2.update();
break;
default:
page = 0;
}
try {
Thread.sleep(33);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
theStage.show();
}
}
Проблема возникает на линии view2 = new View1(theStage);
. Без этой строки на выходе получается большой холст с фоновым изображением. Однако с этой строкой нет фонового изображения, это просто пустой холст. Ниже мой вид. Я максимально упростил его, только одно фоновое изображение, чтобы определить, правильно ли он загружен. (Я упустил импорт, чтобы сделать его кратким, при необходимости я могу добавить их обратно)
public class View1 {
Stage theStage;
Group root;
Scene theScene;
Canvas canvas;
// value of the height and width of screen
int canvasWidth = 1000;
int canvasHeight = 800;
GraphicsContext gc;
Image background;
//View1 constructor initialize the starting position for the image
//Called in controller
public View1(Stage theStage) {
this.theStage = theStage;
this.theStage.setTitle("Estuary Game");
root = new Group();
theScene = new Scene(root);
this.theStage.setScene(theScene);
canvas = new Canvas(canvasWidth, canvasHeight);
root.getChildren().add(canvas);
gc = canvas.getGraphicsContext2D();
background = createImage("assets/mini-game-1.png");
}
//Read image from file and return
private Image createImage(String image_file) {
Image img = new Image(image_file);
return img;
}
//method used to repaint on the image and called in controller
public void update() {
// draw background and sharkMove such like current
gc.drawImage(background, 0, 0);
}
}
Я не уверен, что правильно работаю с несколькими представлениями, мои намерения состоят в том, чтобы просто иметь несколькосцены, но я не был уверен, как это структурировать. Любая помощь будет оценена.