Java 来自不同类的双缓冲区?
这是在我的类中添加到JFrame的。有谁能帮我在屏幕外使用这个类从其他类中绘制图形吗?例如,拥有一个Player类(Player.java)并从该类中绘制图像和其他内容,但仍然缓冲图像,而不在im绘制的每个类中创建新的双缓冲方法Java 来自不同类的双缓冲区?,java,Java,这是在我的类中添加到JFrame的。有谁能帮我在屏幕外使用这个类从其他类中绘制图形吗?例如,拥有一个Player类(Player.java)并从该类中绘制图像和其他内容,但仍然缓冲图像,而不在im绘制的每个类中创建新的双缓冲方法 package Display; import Graphics.Player1; import java.awt.Color; import java.awt.Graphics; import java.awt.image.BufferedImage; import
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);
}
}
}
}
让你的绘图面板看起来像这样
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();
}
}
创建一个类似这样的播放器类(您甚至可以使用其中的paint方法创建一个名为Drawable的接口): 在绘图区域中,将此添加到绘制方法中,其中玩家是玩家对象:
player.paint(g);
如果我的问题不够详细,请告诉我,因为这已经让我很恼火了。谢谢,我刚刚阅读了画布上的文档,为了清楚起见,这个图形g绘制的所有内容都会被缓冲,其他类的任何图形对象都会被缓冲吗?例如,一个作者类draw(Graphics g){g.fillrect………}等中的draw方法将被缓冲。当我尝试使用createBufferStrategy(2)“线程中的异常”thread-1“java.lang.IllegalStateException:组件必须有一个有效的对等方”运行它时,我得到了一个异常。捕获异常是否合适?谢谢,在此之前,我在更新中使用了createBufferStrategy()(图g)。但绘画仍然“闪烁”很多?有什么建议吗?他的主要问题是关于双缓冲。
player.paint(g);