Cuando mostramos una imagen en JAVA y queremos darle movimiento, por ejemplo que al apretar la flecha derecha en el teclado nustra imagen avance JAVA carga la imagen muchas veces lo que ocaciona un tintilleo en la imagen que es bastante molesto...
Para esto existe una Clase que se encarga de cargar en el Buffer del Computador la imagen antes de mostrarla en la pantalla (BufferStrategy) aca esta el codigo con Buffer y sin el para que se entienda la diferencia....
import
java.awt.Color;
public class bufferedImage
extends JFrame{
Image imagen1,imagen2;
InputStream imgStream;
private
BufferStrategy estrategia;//llamo a la clase
int x;
public
bufferedImage(){
super("BUFFERED
IMAGE");
this.setSize(600,
250);
this.setVisible(true);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
this.addKeyListener(kl);//añadimos
el key listener
this.createBufferStrategy(2);
//le
damos a nuestra ventana la estrategia de
guardar 2 veces la imagen en buffer
x = 20;
estrategia =
getBufferStrategy();//iniciamos nuestra variable con la
estrategia
cargaImagen();
}
public void
cargaImagen(){
try {
imgStream = imagenes.class.getResourceAsStream("img/7.png");
imagen1 = ImageIO.read(imgStream);
imgStream = imagenes.class.getResourceAsStream("img/0.png");
imagen2 = ImageIO.read(imgStream);
} catch (IOException
e) {
// TODO
Auto-generated catch block
e.printStackTrace();
}
}
public static void
main(String[]arg){
new
bufferedImage();
}
public void
paint(Graphics g){
Graphics g2 = (Graphics2D)g;
Graphics g3 = (Graphics2D)estrategia.getDrawGraphics();//casteamos
la estrategia
g2.setColor(Color.BLACK);
g3.fillRect(0, 0, 600, 250);
g2.drawImage(imagen1, x, 50, 50, 50, null);//imagen
sin buffer
g3.drawImage(imagen2, x, 150, 50, 50,
null);//imagen
con buffer
estrategia.show();//mostramos
la estrategia
repaint();
}
KeyListener kl = new
KeyListener(){
public void
keyPressed(KeyEvent arg0) {
int codigo =
arg0.getKeyCode();
if(codigo ==
KeyEvent.VK_RIGHT)
{
x = x + 10;
}
}
public void
keyReleased(KeyEvent arg0) {
// TODO
Auto-generated method stub
}
public void
keyTyped(KeyEvent arg0) {
// TODO
Auto-generated method stub
}
};
}
|
Ahora si apretamos la tecla Flecha derecha vemos la diferencia entre las 2 imagenes!! Genial no???