我正在创建一个游戏,并想使用它的 BufferStrategy 绘制到 Canvas。由于某种原因,它似乎不想在屏幕上显示任何内容。我查看了 Java 文档并阅读了其他人提出的几个 Stackoverflow 问题,但无法使其正常工作。只想显示黑色背景,以便我知道它正在工作。
这是我创建画布的地方:
public static void createDisplay() {
if (frame != null)
return;
URL path = Display.class.getResource(ICON_PATH);
Image icon = Toolkit.getDefaultToolkit().getImage(path);
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsConfiguration config = env.getDefaultScreenDevice().getDefaultConfiguration();
Display.frame = new Frame(FRAME_TITLE, config);
Display.canvas = new Canvas(config);
frame.setMinimumSize(MIMIMUM_FRAME_SIZE);
frame.setIconImage(icon);
frame.addWindowListener(this); // For closing frame
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.add(canvas);
frame.setVisible(true);
}
这里是我尝试显示黑色背景的地方:
public void drawFrame() {
Canvas canvas = Display.getCanvas();
BufferStrategy strat = canvas.getBufferStrategy();
if (strat == null) {
canvas.createBufferStrategy(3);
return;
}
do {
do {
Graphics2D g = null;
int screenWidth = canvas.getWidth();
int screenHeight = canvas.getHeight();
try {
g = (Graphics2D) strat.getDrawGraphics();
g.clearRect(0, 0, screenWidth, screenHeight);
//BufferedImage map = loader.loadWorld();
g.setBackground(Color.black);
//g.drawImage(map, 0, 0, canvas);
} finally {
g.dispose();
}
} while (strat.contentsRestored());
strat.show();
} while (strat.contentsLost());
}
drawFrame() 在我的游戏循环中被多次调用,而 createDisplay() 在游戏循环开始之前被调用一次。当我运行我的游戏时,我得到的只是一个带有空白屏幕的框架:
感谢您的帮助。