對於我的遊戲,我畫了一個java.awt.Image
然後將圖像繪製到JPanel上。我這樣做的原因有兩個,主要是因爲我不希望遊戲渲染在EDT上佔用CPU週期,並且爲了便攜性。JPanel閃爍問題
的問題arised造成使用
圖形#的drawImage(圖像IMG,INT的x,INT Y,INT寬度,INT高度, ImageObserver的觀察者)
當在java.awt.JPanel
閃爍。
然而,
圖形#的drawImage(Image img時,INT X,INT Y,ImageObserver的觀察者)
並未導致此問題。
這裏是我的代碼:
Sandbox.java
public class Sandbox implements Paintable {
public static void main(String[] args) throws Exception {
GameWindow window = new GameWindow("Test", 800, 600);
GameScreen screen = new GameScreen(800, 600);
Sandbox sandbox = new Sandbox();
window.add(screen);
window.setVisible(true);
boolean running = true;
while(running) {
sandbox.update();
screen.getPaintBuffer().clear();
screen.getPaintBuffer().paint(sandbox);
screen.repaint();
Thread.sleep(1000/60);
}
}
private int x = 0, y = 0;
public void update() {
x++;
y++;
}
public void paint(Graphics g) {
g.drawRect(x, y, 50, 50);
}
}
GameWindow.java
public class GameWindow extends JFrame {
public GameWindow(String title, int width, int height) {
setTitle(title);
setSize(width, height);
setResizable(false);
setLocationByPlatform(true);
setDefaultCloseOperation(3);
}
}
GameScreen.java
public class GameScreen extends JPanel {
private ImageBuffer buffer;
public GameScreen(int width, int height) {
buffer = new ImageBuffer(width, height);
}
public void paint(Graphics g) {
g.drawImage(getPaintBuffer().getBuffer(), 0, 0, getWidth(), getHeight(), null);
}
public ImageBuffer getPaintBuffer() {
return buffer;
}
}
Paintable.java
public interface Paintable {
public void paint(Graphics g);
}
ImageBuffer.java
public class ImageBuffer {
private final Image buffer;
private int width, height;
public ImageBuffer(int width, int height) {
buffer = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
this.width = width;
this.height = height;
}
public void paint(Paintable paintable) {
paintable.paint(buffer.getGraphics());
}
public void clear() {
buffer.getGraphics().clearRect(0, 0, width, height);
}
public Image getBuffer() {
return buffer;
}
}
我想說的僥倖,一個工作,另一個沒有 – MadProgrammer
Flukes發生一次,他們不容易重現,這個錯誤是。 –
伴侶,如果你對此有信心,那就提交一個bug報告 – MadProgrammer