我正在用Java制作游戏,我有一个画布类,它有游戏标记,我在画布上使用
绘制图像public void paint(Graphics g) {
// draw stuff here
}
我想将所有绘图函数移动到我的Engine类。 我的引擎中有这个方法:
@Override
public void render(Graphics scene) {
// draw stuff here
}
在我的Canvas中我没有调用paint方法,但是在Engine中我必须调用render方法,但是因为它需要作为参数图形场景,所以我有点不知所措。我怎么能从我的Engine类(使用render方法)而不是从Canvas类中绘制组件。
引擎类不扩展任何JComponent,但它会初始化Canvas对象
答案 0 :(得分:1)
我正在用Java制作游戏,我有一个画布类,它有 游戏勾选,我使用
在画布上绘制图像
注意
public void paint(Graphics g){for awt.Canvas,awt.Panel
public void paintComponent(Graphics g){for swing.JComponent,swing.JPanel
我想将所有绘图函数移动到我的Engine类。我有 我的引擎中的这个方法:
答案 1 :(得分:0)
一个问题是Engine无法知道调用paint(g)
,因为调用是在画布上运行的。因此,您很可能需要修改Canvas.paint
,以便调用Engine
。你可以添加一些时髦的听众来Canvas
,但我认为这可能比你需要的更复杂。
一种可行的方法是将Engine
的实例传递给构造上的Canvas
:
public class Engine {
private Canvas canvas;
public Engine() {
Canvas = new Canvas(this);
}
public void render(Graphics g) {
// do stuff
}
}
public class Canvas extends JPanel {
private Engine engine;
public Canvas(Engine engine) {
this.engine = engine;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
engine.render(g);
}
}