Los cambios hasta aqui son pocos pero algo confusos:
public int vX;//se restara/sumara de la posicion X
public BufferedImage buffer;// objeto del tipo bufferedimage
buffer = new BufferedImage(WIDTH,HEIGHT, BufferedImage.TYPE_INT_RGB);
//si no me equivoco, lo que se esta haciendo aca es creando una imagen
//como la clase paint que heredamos de canvas ya no va a ser usada (mirar abajo)
// creamos una imagen nueva de la ventana y esta es la que vamos a modificar
ventana.setIgnoreRepaint(true);// para mejorar la performance ¿?
public void paintWorld() {// nueva clase que usamos en vez de la clase paint() heredada de canvas
Graphics g = buffer.getGraphics();//g va a ser igual a grafico 2D nuevo...
getGraphics().drawImage(buffer,0,0,this);// grafica
}
public void updateWorld() {//clase que se encarga de las matematicas ^_^
posX += vX;// modificamos las coordenadas x
if (posX < 0 || posX > WIDTH) vX = -vX;//si es mayor al ancho entonces paso la pantalla
}
Bueno hasta aca le decimos al bicho que aparezca en medio de la pantalla y que vaya sumando 2 al eje horizontal hasta que llegue al final de la pantalla y cuando llegue al tope, los comience a restar y cuando llegue al principio de la pantalla que sume de nuevo y asi…
Algo que me gusta son los nombres de los capitulos, son bastante creativos, este por ejemplo se llama, mas lento que el ojo XD
ventana.createBufferStrategy(2);
/*segun lo que dice el api (ver en la web) createBufferStrategy crea una
* nueva estrategia para multi-buffering que es util para mejorar la
renderizacion, crea la mejor estrategia segun el numero de buffers que
* le des, en este caso 2
*/
g.drawImage(buffer,0,0,this);// mantiene la imagen antigua en su lugar mientras la nueva se dibuja
2 lineas de codigo que son un poco confusas, io todavia no temrino de entenderlas, pero si leen al comienzo del capitulo dice: . Una vez que el escenario ha sido pintado “fuera de la pantalla” (off-screen)( paintWorld() ), esa imagen en memoria es volcada encima de la ventana. A esta imagen en memoria se la suele llamar buffer, como que le da algo de sentido
Cuando ejecuten les va dar un error:
Exception in thread “main” java.lang.IllegalStateException: Component must have a valid peer
Si siguen avanzando el error en el sgte codigo desaparece, pero si quieren saber porque se da, bueno parece ser que antes de hacer el buffering necesita primero la ventana tener algunas caracteristicas, sobre todo estar visible, si quieren que corra el codigo solo bajen el codigo ventana.createBufferStrategy(2); al final del constructor y va a correr sin problemas
Avanzamos un capitulo mas, unas cauantas lineas de cosigo agregadas y otras borradas, que son de suma importancia y mejoran bastante el comportamiento del bicho
public BufferStrategy strategy;
/*
* La clase BufferStrategy representa el mecanismo por el cual
se organiza la memoria compleja de un Canvas o ventana en particular
* Las limitaciones del hardware y el software determinan cual
* estrategia de buffer utilizar
*/
strategy = getBufferStrategy();// retorna la estrategia que se esta utlizando
requestFocus();// hace un enfoque a esta ventana
strategy.show();// Hace el siguiente buffer visible
bueno por hoy lo dejo en este capitulo c’ ya