1

这在我的班级中被添加到我的 JFrame 中。任何人都可以帮助我如何使用这些类 offScreen 从另一个类中绘制图形吗?例如,有一个 Player 类(Player.java)并从该类中绘制图像和其他内容,但仍然缓冲图像而不在每个我绘制的类中创建新的双缓冲方法?

package Display;

import Graphics.Player1;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
      import javax.swing.JPanel;



      public class DrawArea extends JPanel implements Runnable{      
    Thread drawLoop = new Thread(this);
    BufferedImage image = new BufferedImage(1000, 700, BufferedImage.TYPE_INT_RGB);
   public Graphics offScreen = image.getGraphics();

    public DrawArea() {
        setSize(1000, 700);
        drawLoop.start();

    }

    public void update(Graphics g) {
        paint(g);
    }

    public void paint(Graphics g) {
        offScreen.setColor(Color.yellow);
        offScreen.fillRect(0, 0, 1000, 700);

        g.drawImage(image, 0, 0, null);
    }

    public void run() {
        while(true) {
            repaint();
            try {
                drawLoop.sleep(90);
            } catch (InterruptedException ex) {
                Logger.getLogger(DrawArea.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

}
4

2 回答 2

0

使您的绘图面板看起来像这样。

public class DrawingPanel extends Canvas {

    public DrawingPanel(){
        setVisible(true);
    }

}

主框架。

public class MyFrame extends JFrame implements Runnable{

    DrawingPanel panel;

    public MyFrame(){
        panel = new DrawingPanel();
        add(panel);
        setVisible(true);
        panel.createBufferStrategy(2);
        new Thread(this).start();
    }

    public void run(){
        BufferStrategy buffer = panel.getBufferStrategy();
        while (true){
            Graphics g = buffer.getDrawGraphics();
            render(g);
            g.dispose();
            buffer.show();
            try {
                Thread.sleep(90);
            } catch (Exception e){}
        }
    }

    public void render(Graphics g){
        // Do your drawing here
    }

    public static void main(String[] args){
        new MyFrame();
    }

}
于 2012-10-26T09:59:54.040 回答
-1

像这样创建一个 Player 类(您甚至可以创建一个名为 Drawable 的接口,其中包含 paint 方法):

public class Player {

    public void paint(Graphics g) {
        //Draw player specigfic things
    }
}

在您的 DrawArea 中,将此添加到播放器是 Player 对象的绘制方法中:

player.paint(g);
于 2012-10-26T12:23:00.053 回答