elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Duda Doble Buffer :(
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda Doble Buffer :(  (Leído 6,333 veces)
Amerikano|Cls


Desconectado Desconectado

Mensajes: 789


[Beyond This Life]


Ver Perfil WWW
Duda Doble Buffer :(
« en: 12 Mayo 2009, 08:30 am »

Hola a todos, pues trata de que estoy desarrollando un pequeño juego en java de carros y pues cuando pego las imagenes y el bucle del juego me actualiza las nuevas posiciones, la imagen parpadea horrorosamente, pues bien se que esto se soluciona con la tecnica denominada doble buffering pero de lo que he consultado hasta el momento no me ha convensido, es decir no he entendido muy bien de que trata todo esto.

Lo que yo quiero es que al rotar la imagen del carro con el sigueinte code, no me de ese parpadeo molesto que aparece al actualizar la imagen. Mi duda es si debo crear un doble buffer por cada imagen que deba pintar, o con uno solo basta para todo??, mejor dicho no tengo ni palo de idea de como funciona el doble buffer y pues por eso recurro al foro para ver si alguien me saca de dudas :).

Código
  1. public void paint(Graphics g){
  2.  
  3. g2.setColor(new Color(60,60,60));
  4. g2.fillRect(0,0,getWidth(),getHeight());
  5.  
  6. at = AffineTransform.getRotateInstance(Math.toRadians(angulo),32, 32);
  7. atop = new AffineTransformOp(at,rh);
  8.  
  9. buffer = atop.filter(carro, null);
  10. g2.drawImage(buffer,200,200,this);
  11. }

De antemano 1000 gracias  ;D


En línea





Mi blog:
http://amerikanocls.blogspot.com
-Ramc-


Desconectado Desconectado

Mensajes: 495



Ver Perfil
Re: Duda Doble Buffer :(
« Respuesta #1 en: 12 Mayo 2009, 16:48 pm »

Mira, el doble búfer es como dibujar todo un cuadro de animación a un área no visible antes de copiarlo dentro de la ventana visible de un programa y el afuera de la pantalla sería el búfer.

Con el doble búfer entonces crea una superficie adicional(fuera de la pantalla, por decirlo así), construye todo el dibujo en esa área y al final dibuja toda la superficie  de gráficos al búfer que se está viendo.

El doble búfer utiliza mas memoría, por lo que debería intentar primero sobreponer el método update() y dibujar sólo porciones de la pantalla, con lo que puede que solucioné su problema, pero, si no funciona o quiere eliminar por casi completo el parpadeo de la aplicación entonces debe crear un objeto Image y uno Graphics adicionales.

Image off;
Graphics offscreen;

los inicializa.

off = createImage(getSize().width, getSize().height);
offscreen = off.getGraphics();

Y ahora siempre que vaya a dibujar que es regularmente en el método paint(), en vez de dibujar en el gráfico que recibe paint dibuja en el gráfico fuera de la pantalla, por ejemplo:

offscreen.drawImage(....);

Y al final de el método paint después de terminar todo el dibujado haces:

screen.drawImage(offscreen, 0, 0, this);

Y deberas sobreponer el método update para que no se limpie la pantalla entre cuadros.

Hace un rato que no dibujo nada en java, pero, hasta donde tenía entendido el segundo búfer no es eliminado por el recolector de basura, por lo que también tendras que usar métodos como dispose() para retirar explicitamente el objeto.

Espero que hayas entendido.


En línea


Shhh... be vewy, vewy, quiet!  I'm hunting wabbits...
LA PANDILLA MAS GRANDE DE MI CIUDAD, SE LLAMA POLICIA NACIONAL.
~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


Ver Perfil WWW
Re: Duda Doble Buffer :(
« Respuesta #2 en: 12 Mayo 2009, 16:58 pm »

Si quieres un ejemplo simple:
http://e0n-productions.blogspot.com/2008/11/pong-en-java.html

Aunque Java creo que ya incorpora api's propias para el doble buffer ;)
En línea

Amerikano|Cls


Desconectado Desconectado

Mensajes: 789


[Beyond This Life]


Ver Perfil WWW
Re: Duda Doble Buffer :(
« Respuesta #3 en: 12 Mayo 2009, 18:12 pm »

OK, muchas gracias a los 2, intentare hacerlo como me indican y luego comento como me fue  ;).

salu2
En línea





Mi blog:
http://amerikanocls.blogspot.com
Amerikano|Cls


Desconectado Desconectado

Mensajes: 789


[Beyond This Life]


Ver Perfil WWW
Re: Duda Doble Buffer :(
« Respuesta #4 en: 12 Mayo 2009, 19:41 pm »

Ya lo solucione  ;D, el problema que tenia era que estaba pintando primero el doble buffer y enseguida pintaba el mundo, por esta razon parpadeaba  ;).

salu2 y gracias a los 2.
En línea





Mi blog:
http://amerikanocls.blogspot.com
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda insuficiencia RAM o buffer de reproductor Br
Windows
Wilfly 1 1,709 Último mensaje 2 Mayo 2013, 13:27 pm
por staike
duda con buffer de cin
Programación C/C++
david_tosc90 1 1,571 Último mensaje 17 Abril 2014, 23:54 pm
por rir3760
arreglo de doble buffer
Programación C/C++
d91 1 1,522 Último mensaje 22 Mayo 2014, 04:22 am
por engel lex
Doble buffer en OpenGL (glfw)
Programación C/C++
4dr14n31t0r 2 1,904 Último mensaje 16 Enero 2017, 21:14 pm
por 4dr14n31t0r
Duda curl y buffer php
PHP
MetaNoia 0 1,716 Último mensaje 1 Marzo 2020, 21:28 pm
por MetaNoia
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines