Piszę grę (Lunar lander) i mam problemy z migotaniem. Robię double buffering i jest jeszcze gorzej :/ Teraz, jak zrobić żeby nie było migotania? Kiedy robię to ręcznie to mi się wywala bo przekraczam ilość dostępnej pamięci.
paint w JPanel'u: (bf - BufferStrategy z JFrame'a)
public void paint(Graphics fg) {
Graphics g = bf.getDrawGraphics();
super.paint(g);
RenderingHints rh =
new RenderingHints(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
rh.put(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
((Graphics2D) g).setRenderingHints(rh);
Graphics2D g2d = (Graphics2D)g;
currentLevel.draw(g2d);
if (craft.isVisible())
g2d.drawImage(craft.getImage(), craft.getX(), craft.getY(),
this);
else if (craft.isCrashing())
g2d.drawImage(craft.getImage(), craft.getX(), craft.getY(),
this);
if (ingame) {
craft.drawClocks(g2d);
} else if (timeBuffer < 0){
String msg = "Game over";
setBackground(Color.BLACK);
g.setColor(Color.WHITE);
if(craft.isVisible())
{
msg = "Congratulations!";
setBackground(Color.WHITE);
g.setColor(Color.BLACK);
}
Font small = new Font("Helvetica", Font.BOLD, 14);
FontMetrics metr = this.getFontMetrics(small);
g.setFont(small);
g.drawString(msg, (getWidth() - metr.stringWidth(msg)) / 2,
getHeight() / 2);
}
g.dispose();
bf.show();
Toolkit.getDefaultToolkit().sync();
}
pełny kod i binarka na rapidshare:
</url>http://rapidshare.com/files/393975402/landerSrc.zip.html<url>
<url>http://rapidshare.com/files/393975231/lander.zip.html<url></url></url></url>