Java绘图图形



我正在用Java制作一款游戏,我有一个canvas类,其中包含游戏标记,我使用

在画布上绘制图像
public void paint(Graphics g) {
    // draw stuff here
}

我想移动所有的绘图功能到我的引擎类。我有这个方法在我的引擎:

@Override
public void render(Graphics scene) {
 // draw stuff here
}

在我的画布中,我不必调用油漆方法,但在引擎中,我必须调用渲染方法,但由于它将图形场景作为参数,我有点不知所措。我怎么能从我的Engine类(使用render方法)而不是从Canvas类中绘制组件呢?

引擎类不扩展任何JComponent,但是它初始化了Canvas对象

我正在用Java制作一款游戏,我有一个canvas类,它有我使用

在画布上绘制图像。

注意

public void paint(Graphics g) {for awt。帆布、awt。小组

public void paintComponent(Graphics g) {for swing。JComponent,摇摆不定。JPanel

  • 任何绘制只能为J/Component完成,好的做法是不能将这个方法移出J/Component声明

我想移动所有的绘图功能到我的引擎类。我有这个方法在我的引擎:

  • 在paint/paintComponent执行之前准备好所有对象是一个好主意,
  • 将所有对象放入数组
  • 内部paint/paintComponent只循环内部数组的准备对象,从Swing Timer,鼠标/键事件调用
  • 所有用于绘制AWT/Swing GUI的事件必须在事件调度线程上完成
  • 为今天的GUI使用Swing JComponent, JPanel和覆盖paintComponent
  • 这里有几个非常好的代码示例,标记为paintComponent

一个问题是引擎没有办法知道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);
    }
}

最新更新