🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.lenguajes.java
Article #26762

Re: Graficos de fondo??

#26762
From: Guy
Date: Fri, 04 Dec 1998 00:00
200 lines
6703 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: <3667F315.54FEB990@abonados.cplus.es>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
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>

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/04
Message-ID: <3667F315.54FEB990@abonados.cplus.es>
X-Deja-AN: 418624033
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