Я пытаюсь реализовать двойную буферизацию для игры, но не уверен, что делаю это правильно.
Я вызываю this.repaint()
в своем основном игровом цикле, который затем должен сделать следующее:
@Override
public void paint(Graphics g){
// this.getWidth() / this.getHeight() is the window size
this.dbImage = createImage(this.getWidth(), this.getHeight());
this.dbg = dbImage.getGraphics();
this.paintComponent(dbg);
g.drawImage(this.dbImage, 0, 0, this);
}
@Override
public void paintComponent(Graphics g){
try{
g.drawImage(bg, 0, 0, this);
// gameObjects is an ArrayList with an object in it that represents
// an item on the screen, such as an enemy or a bullet
for(int i = 0; i < gameObjects.size(); i++){
GameObject go = gameObjects.get(i);
g.drawImage(go.getSprite(), go.getX(), go.getY(), this);
}
}catch(Exception e){
}
}
В основном я сделал то, что делает этот парень здесь: YouTube Video Проблема, с которой я столкнулся, заключается в том, что кажется, он работает хуже, чем до того, как у меня была двойная буферизация. Иногда элементы зависают на полсекунды, затем снова включаются, и все работает нормально, затем это происходит снова в течение нескольких минут (или меньше).