我的目标是为我的俄罗斯方块程序绘制一些立方体,但我遇到了一个问题。 我遵循MVP原则,因此我的数据结构和视图通过演示者连接。
我的想法是,视图从模型中获取数据,以便绘制块。 在我的实现中,GraphicsContext和绘制块的命令在初始化方法中初始化。通过加载FXML文件来注入画布,并且还设置了myGroup。
让我们看看我的视图控制器中的一些代码:
public void start() throws IOException
{
initCanvas(); // initialize FXML -> injecting myCanvas; initialize myGroup
Stage stage = new Stage();
field = mainPresenter.initializeField();
landed = mainPresenter.initializeLanded();
final long startNanoTime = System.nanoTime();
new AnimationTimer()
{
@Override
public void handle(long now)
{
mainPresenter.update(); // exactly 1 frame of the game
// this can be initialized here but its already to late :(
landed = mainPresenter.initializeLanded();
}
}.start();
canvasScene = new Scene((Parent) myGroup);
stage.setTitle("Tetris");
stage.setScene(canvasScene);
stage.show();
}
从我的主类调用start()方法。
所以这是我的问题:GraphicsContext需要来自landed字段的信息,但GC位于initialize方法中,因此我得到一个空指针。 - >在初始化方法时,a无法访问模型。
@FXML
public void initialize()
{
// it would be nice if this here could be possible! :)
landed = mainPresenter.initializeLanded();
gc = myCanvas.getGraphicsContext2D();
// basically some drawing options here
gc.setFill(Color.BLUE);
gc.fillRect(0, 450, 50, 50);
}
我希望我能为你妥善陈述我的问题。如果不清楚,请询问更多信息! 这是我的第一个“大”应用程序,我非常确定我的问题有一个简单的解决方案,但只是找到它。