Article View: es.comp.lenguajes.java
Article #26742Re: Graficos de fondo??
From: Guy
Date: Thu, 03 Dec 1998 00:00
Date: Thu, 03 Dec 1998 00:00
197 lines
6697 bytes
6697 bytes
Jonathan Revusky wrote:
>
> No s�. El c�digo que te d� me funciona bien sin modificar y, me parece
> que hace precisamente lo que dices que quieres. Coloca un gr�fico de
> fondo y mueve otro gr�fico por encima. �Has intentado utilizar ese
> c�digo como modelo y adaptarlo?
He probado pero lo que me pasa es que no trato de mover un grafico por la
pantalla del modo que en tu applet. En mi aplicaci�n hay un fondo al que se a�aden
canvas que contienen imagenes y estas se mueven cuando el usuario lo desea. El
motivo por el que no te he enviado un ejemplo representativo del c�digo es porque
los canvas se a�aden en un lugar muy diferente al sitio donde se genera el fondo,
asi que era un poco complicado de resumir, ademas me parec�a que ya te hab�as
tomado suficiente molestia contestando con el primer ejemplo.
En el ejemplo que mande lo �nico que intentaba hacer era dibujar el fondo con
duble-buffering,porque no sab�a si lo hacia bien (funcionaba mejor que sin
double-buffering pero no del todo bien).No intentaba colocar los gr�ficos que se
mueven por encima supon�a que si conseguia usar el dobule-buffering con el fondo
lo podr�a hacer con los graficos de primer plano.
>
> El motivo t�pico por el parpadeo es que borras la �magen y vuelves a
> dibujarla y esa operaci�n se ve como un parpadeo. Y la soluci�n t�pica
> es el "double buffering" donde haces el borrar/dibujar en un buffer no
> visible y despu�s lo dibujas todo de una vez.
>
> Tu problema, por lo tanto, supongo, es que, sin querer, est�s borrando y
> dibujando en un contexto de graphics visible, y por eso parpadea, pero
> no hay ning�n ejemplo de tu c�digo, as� que no s� realmente...
>
En realidad yo cre�a que de la forma que tu dec�as iba a funcionar pero no lo
hace y no se que hago mal. Aqui tienes un codigo que funciona por si solo, el
primero es la adaptacion que hice de lo que tu me mandaste y el segundo es como yo
lo hac�a, comprobaras que si cargas un grafico grande con el primero y lo
desplazas parpadea muchisimo, con el segundo no es perfecto pero creo que ocurre
lo que me tem�a y que es lo mejor que voy a conseguir.
CODIGO 1
Programa que crea la pantalla:
import java.awt.*;
class Prueba{
public static void main(String Args[]){
//Ventana y panel en los que coloco todo
Frame ventanaJuego = new Frame();
ScrollPane scrollPane1 = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);
//Meto el SPanel en la ventana
ventanaJuego.add(scrollPane1);
ventanaJuego.setVisible(true);
//Tama�o que tiene la imagen que cargo
Dimension d= new Dimension(1386,1911);
Image offImage = scrollPane1.createImage(d.width, d.height);
Graphics offGraphics = offImage.getGraphics();
MiPanel fondoPantalla= new MiPanel("grafico",offGraphics,offImage);
scrollPane1.add(fondoPantalla);
scrollPane1.validate();
}
}
Definicion de MiPanel:
import java.awt.*;
import java.awt.image.*;
public class MiPanel extends Panel {
//VARIABLES
String ficheroImagen=null;
//String que contiene la ruta del fichero de la imagen
Image imagen=null;
Graphics offGraphics=null;
Image imagenBuffer = null;
//CONSTRUCTOR
public MiPanel(String ficheroImagen,Graphics offGraphics,Image imagenBuffer){
Toolkit herramientas =this.getToolkit();
imagen= herramientas.getImage(ficheroImagen);
this.imagenBuffer= imagenBuffer;
this.offGraphics = offGraphics;
}
//OPERACIONES
public Dimension getPreferredSize(){
Dimension d = new Dimension();
d.height= imagen.getHeight(this);
d.width =imagen.getWidth(this);
return d;
}
//Sobreescribimos paint para dibujar la imagen en el canvas
public void paint(Graphics g){
this.update(g);
}
public void update(Graphics g){
offGraphics.clearRect(0,0, getSize().width, getSize().height);
offGraphics.drawImage(imagen,0,0,this);
g.drawImage(imagenBuffer, 0,0, this);
}
}//MiPanel
CODIGO 2
Programa que crea la pantalla:
import java.awt.*;
class Prueba{
public static void main(String Args[]){
//Ventana y panel en los que coloco todo
Frame ventanaJuego = new Frame();
ScrollPane scrollPane1 = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);
//Meto el SPanel en la ventana
ventanaJuego.add(scrollPane1);
ventanaJuego.setVisible(true);
//double-buffer
Dimension d= new Dimension(1386,1911);
Image offImage = scrollPane1.createImage(d.width, d.height);
Graphics offGraphics = offImage.getGraphics();
MiPanel fondoPantalla= new MiPanel("grafico");
fondoPantalla.paint(offGraphics);
scrollPane1.add(fondoPantalla);
scrollPane1.validate();
}
}
Definicion de MiPanel:
import java.awt.*;
import java.awt.image.*;
public class MiPanel extends Panel {
//VARIABLES
String ficheroImagen=null;
//String que contiene la ruta del fichero de la imagen
Image imagen=null;
Graphics offGraphics=null;
Image imagenBuffer = null;
//CONSTRUCTOR
public ImagenPanel(String ficheroImagen){
Toolkit herramientas =this.getToolkit();
imagen= herramientas.getImage(ficheroImagen);
}
//OPERACIONES
public Dimension getPreferredSize(){
Dimension d = new Dimension();
d.height= imagen.getHeight(this);
d.width =imagen.getWidth(this);
return d;
}
//Sobreescribimos paint para dibujar la imagen en el canvas
public void paint(Graphics g){
this.update(g);
}
public void update(Graphics g){
g.drawImage(imagen, 0,0, this);
}
}//MiPanel
En cuanto a lo de usar swing es una buena idea, pensaba usarlo pero cuando
todo funcionara como debe. La verdad es que no me lo hab�a mirado demasiado y
cre�a que era un simple lavado de cara del awt.
Saludos, Guy.
Technical Details
Message-ID:
<3666DE3C.4B5331F2@abonados.cplus.es>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<365DDDA5.7353817F@abonados.cplus.es> <365DF174.764723F3@jet.es> <36604175.8D872E19@abonados.cplus.es> <366057FC.DB7672B5@jet.es> <3662E8AF.F4D2B9CD@abonados.cplus.es> <36633CA0.72EB5AEE@jet.es>Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII X-Google-Thread: 1116f3,4660b6ff03362f10 X-Google-Attributes: gid1116f3,public From: Guy <0309651s01@abonados.cplus.es> Subject: Re: Graficos de fondo?? Date: 1998/12/03 Message-ID: <3666DE3C.4B5331F2@abonados.cplus.es> X-Deja-AN: 418326741 Content-Transfer-Encoding: 8bit References: <365DDDA5.7353817F@abonados.cplus.es> <365DF174.764723F3@jet.es> <36604175.8D872E19@abonados.cplus.es> <366057FC.DB7672B5@jet.es> <3662E8AF.F4D2B9CD@abonados.cplus.es> <36633CA0.72EB5AEE@jet.es> X-Accept-Language: en,es Content-Type: text/plain; charset=iso-8859-1 Organization: Telefonica Transmision de Datos Mime-Version: 1.0 Newsgroups: es.comp.lenguajes.java