如何在不同类的相同 Canvas 上绘图?问题是当从不同的类访问画布时,会返回不同的引用。
加载应用程序的主类:
@FXML
public Canvas game = new Canvas(WIDTH, HEIGHT);
//Объект для взаимодействия с классом.
public static GameController gamecontroller = new GameController();
//Графический контекст, из которого я рисую
public GraphicsContext gc = this.getGraphicsContext();
public void initialize(URL url, ResourceBundle resourceBundle) {
System.out.println("Game was loaded");
gc = getGraphicsContext(); //{return draw.getGraphicsContext2D;}
gc.setFill(Color.BLACK);
gc.fillRect(0,0,WIDTH,HEIGHT);
Handler.handler.addGameObject(new Player(30.0, 30.0, Id.player)); //Добавляю объект на сцену
Handler.handler.render(); //Рисую его
}
public GraphicsContext getGraphicsContext()
{
return game.getGraphicsContext2D();
}
我还有一个 GameObject 类,游戏对象类是从该类继承而来的,例如 Player。游戏对象:
public static GraphicsContext draw
= GameController.gamecontroller.getGraphicsContext();
玩家:
public void render() {
draw.setFill(Color.WHITE);
draw.fillRect(10,10,16,16);
}
也就是说,render() 方法可以工作,但 Canvas 上没有显示任何内容,由于某种原因,当访问一个对象(或访问一个返回值的函数时)时,会返回对它的不同引用。
您最终可能会得到多个
GameController. 您在应用程序开始的某处创建第一个,调用它的initialize. 反过来,它调用renderobjectPlayer并render读取 static fieldgamecontroller。并且该字段gamecontroller使用 的另一个实例进行初始化GameController。所以事实证明你指的是一个完全不同的对象。尝试像这样修复您的代码:
GameController.gamecontroller如果您的代码在字段初始化之前没有拉到其他任何地方,那么NullPointerException它不会崩溃并且一切都会好起来的。