Я пишу довольно простую игру на Java и сталкиваюсь с проблемой очень серьезного мерцания, когда играю в игру как апплет в браузере. То есть все мои спрайты, которые рисуются поверх фона, иногда отображаются на экране, но обычно нет - они периодически вспыхивают на экране, а затем исчезают. Я читал, что двойная буферизация, вероятно, является решением этой проблемы, но у меня возникают проблемы с ее правильной реализацией.
Я использую JApplet в качестве контейнера для JPanel. Этот JPanel является контейнером, на котором рисуются спрайты и игровые объекты, то есть в методе JPCanel paintComonent. В моем JApplet я использую методы переопределения init, paint и update следующим образом:
Image offscreen;
Graphics bufferGraphics;
Dimension dim;
public void init(){
dim = getSize();
setBackground(Color.BLACK);
offscreen = createImage(dim.width,dim.height);
bufferGraphics = offscreen.getGraphics();
}
public void paint(Graphics g){
bufferGraphics.clearRect(0,0,dim.width,dim.height);
//here is my question - i"m not sure what I should print to bufferGraphics
g.drawImage(offscreen, 0, 0, this);
}
public void update(Graphics g){
paint(g);
}
Проблема, с которой я сталкиваюсь, заключается в том, что в строке с комментариями я не уверен, что нужно сделать, чтобы текущее изображение апплета было напечатано в bufferGraphics. Я прочитал пример , в котором спрайт был нарисован прямо в JApplet, без использования JPanel. В свете этого я предполагаю, что мне нужно нарисовать JPanel на bufferGraphics в закомментированной строке. Я на правильном пути здесь? Любая помощь очень ценится; Я просто хотел бы знать любой способ сделать это правильно.