Java - Ayuda con Repaint en applet

 
Vista:

Ayuda con Repaint en applet

Publicado por Alfredo (4 intervenciones) el 03/05/2007 16:13:40
Estoy haciendo un applet y no consigo que repaint se ejecute correctamente. Os adjunto el codigo. Lo que quiero conseguir es que la pelota se vaya moviendo, pero lo único que consigo es que sólo aparezca al final del recorrido. Creo que el problema está en que repaint sólo se ejecuta 1 vez pero no sé cómo hacer que se ejecute cada vez que se cambia alguna coordenada de la pelota

Gracias

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class Principal extends Applet implements Runnable, MouseListener{

Thread anima,anima2;
int radio=10; //radio de la pelota
int x, y,x1,y1,x0,y0; //posición del centro de la pelota
int dx = 1; //desplazamientos
int dy = 1;
int anchoApplet;
int altoApplet;
double dir,x2,y2;
int energia=15;

// Para el Buffer
Image imag;
Graphics gBuffer;

public void init () {
anchoApplet=getSize().width; //dimensiones del applet
altoApplet=getSize().height;
x=anchoApplet/4; //posición inicial de partida
y=altoApplet/2;
addMouseListener(this);
}
public void start(){
if(anima ==null){
anima=new Thread(this);
anima.start();

}
}
public void stop(){
if(anima!=null){
anima.stop();
anima=null;
}
}
public void run() {
x1=30;
y1=30;
}
void mover() {

energia=energia-1;
x2=x0+(energia*Math.cos(dir));
y2=y0+(energia*Math.sin(dir));
x1=(int) x2;
y1=(int) y2;
System.out.println("x: "+x0+" ------> "+x1);
System.out.println("y: "+y0+" ------> "+y1);
x0=x1;
y0=y1;
repaint();


}
public void paint (Graphics g) {
g.setColor(Color.red);
g.fillOval(x1-radio, y1-radio, 2*radio, 2*radio);

}

public void update(Graphics g){
System.out.println("Repaint llamado");
if(gBuffer==null){
imag=createImage(anchoApplet, altoApplet);
gBuffer=imag.getGraphics();
}
gBuffer.setColor(getBackground());
gBuffer.fillRect(0,0, anchoApplet, altoApplet);
// dibuja la pelota
gBuffer.setColor(Color.red);
gBuffer.fillOval(x1-radio, y1-radio, 2*radio, 2*radio);
// transfiere la imagen al contexto gráfico del applet
g.drawImage(imag, 0, 0, null);
}

public void mousePressed(MouseEvent e) {
x0=x1;
y0=y1;
x1=e.getX();
y1=e.getY();
calculodedireccion();

}
public void mouseReleased(MouseEvent e) {
energia=10;
while (energia>0) {
mover();
try {
Thread.sleep(100);
}
catch(InterruptedException ex){
break;
}
}

}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}

public void calculodedireccion(){
dir=Math.atan((y1-y0)/(x1-x0));
if (x1-x0>0)
dir=2*Math.PI-dir;
if (x1-x0<=0)
dir=Math.PI-dir;

System.out.println(dir);

}

}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda con Repaint en applet

Publicado por danny colmenares (3 intervenciones) el 12/05/2007 22:58:48
Creo que lo que pasa es que al redefinir el metodo paint del applet se le elimina alguna funcion importante para ser redibujado correctamente

No se por que no toman en cuenta esta situacion en los tutoriales ni en el tutorial de java 6 de sun mycrosistem donde redefinen alegremente el metodo sin tomar en cuenta lo que este hace y que no debe de dejar de hacer

Creo que la solucion es redefinir el metodo paintComponent pero no he llegado hasta alla

Espero que no quede esta discusion aqui y que lleguemos al fondo del asunto porque estoy varado por ese detalle

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar