Foros del Web » Programación para mayores de 30 ;) » Java »

Hilos en Applet

Estas en el tema de Hilos en Applet en el foro de Java en Foros del Web. Hola amigos estoy estudiando el tema de hilos en java e hice un programa con hilos en donde en una ventana Applet corren ovalos de ...
  #1 (permalink)  
Antiguo 18/08/2012, 10:22
 
Fecha de Ingreso: enero-2010
Ubicación: Colombia
Mensajes: 238
Antigüedad: 14 años, 3 meses
Puntos: 2
Hilos en Applet

Hola amigos estoy estudiando el tema de hilos en java e hice un programa con hilos en donde en una ventana Applet corren ovalos de colores pero lo malo es que se me salen de la ventana y lo que quiero es que reboten cuando lleguen a cualquiera de los cuatro extremos. Este es el codigo:

Primera clase:


Código:
import java.awt.Graphics;
import java.awt.Color;
 public class circulo extends java.applet.Applet{
Circulos cir[];
public void init(){ //el init inicializa el applet
	this.setSize(1000,1000);
	cir=new Circulos[100];
	for (int i=0;i<100;i++){
		cir[i]=new Circulos(this);
		cir[i]=new Circulos(this);
		cir[i].start();
	}
}
public void paint (Graphics g){ //g.drawOval pinta el contorno y g.fillOval rellena y g.Rect pinta un rectangulo y g.drawArc pinta un arco, g.drawPoligon pinta un poligono 
	repaint();
	for(int i=0;i<100;i++){
		g.setColor(new Color((int)(Math.random()*255),(int)(Math.random()*255),(int)(Math.random()*255)));
		g.fillOval(cir[i].X,cir[i].Y,cir[i].ancho,cir[i].largo);
		
	}
}
}
Segunda clase:


Código:
import java.awt.Color;
public class Circulos extends Thread{
	circulo cir;
	int X,Y,ancho,largo,velocidad;
	
	Circulos(circulo cir){
		X=0;
		Y=(int)(Math.random()*600);
		ancho=(int)(Math.random()*50);
		largo=(int)(Math.random()*50);
		velocidad=(int)(Math.random()*100);
		this.cir=cir;
	}
	
		public void run(){
			while(true){
			 cir.repaint();
			 try {
				 this.sleep(velocidad);
				 
			 }catch(InterruptedException e){}
			 X++;
			 Y++;
			}
		}
}
  #2 (permalink)  
Antiguo 18/08/2012, 13:02
Avatar de zero0097  
Fecha de Ingreso: abril-2010
Ubicación: México
Mensajes: 481
Antigüedad: 14 años
Puntos: 69
Respuesta: Hilos en Applet

facil, el ovalo debe moverse segun una posicion X o Y sumandole una variable de incrementos..cuando la figura este en la posicion width o height de la pantalla ese incremento será un decremento solo pasandolo a negativo con in o else segun el caso.....

ejem:
X = X + incremento;

y si hago en un hilo eso junto con el repaint(). la posicion del dibujo va ir cambiando siempre y cuando incremento sea un valor constante, lo unico que varia es X....

if(X > ventana.width())
eso significa que ya esta en el borde entonces: incremento = -incremento;

ahora el hilo ejecutara
X = X + (- Incremento)

eso hara que se valla reduciendo, y ahora va a ir hacia atras....

cuando se cuempla if(X =< 0)
incremento = - incremento

como era negativo eso lo cambiará a positivo, ahora si te fijas esas dos condiciones como hacen lo mismo puedes ponerlas en un mismo if.....

espero y la hayas captado...
__________________
De nada, hay te encargo +1...
  #3 (permalink)  
Antiguo 18/08/2012, 20:19
 
Fecha de Ingreso: enero-2010
Ubicación: Colombia
Mensajes: 238
Antigüedad: 14 años, 3 meses
Puntos: 2
Respuesta: Hilos en Applet

Hola zero0097 gracias por tu ayuda me parece muy acertado lo que escribiste pero es que necesito de tu ayuda. Lo que pasa es que soy nuevo en java y no se exactamente en que parte del codigo debo colocar las condiciones que me sugeriste. Los width y height los coloque en la creacion del applet pero al colocar las condiciones me botaba error o no me funcionaban. Me puedes colaborar por favor. Gracias
  #4 (permalink)  
Antiguo 19/08/2012, 17:23
Avatar de zero0097  
Fecha de Ingreso: abril-2010
Ubicación: México
Mensajes: 481
Antigüedad: 14 años
Puntos: 69
Respuesta: Hilos en Applet

Mira bro, aki un codigo express, nomas cheka que la pelota rebota hasta que se oculta, esto es por que la posicion de la pelota en X se define desde su eskina superior iskierda, por lo tanto si quieres ver que rebote en el borde, restale el grosor de la pelota en la condicion....

Código Java:
Ver original
  1. public class Prueba extends JApplet implements Runnable {
  2.     //variables globales
  3.     int posX, posY, incX;
  4.    
  5.     public void init() {
  6.         incX = 10;
  7.     }
  8.    
  9.     public void start() {
  10.         //Creo el hilo
  11.         Thread animacion = new Thread(this);
  12.         //y lo empiezo
  13.         animacion.start();
  14.     }
  15.    
  16.     public void paint(Graphics g) {
  17.         //limpio la pantalla de el dibujo anterior de un modo ortodoxo xD
  18.         g.fillRect(0,  0, this.getWidth(), this.getHeight());
  19.        
  20.         //y pinto, pasandole las variables que se modifican cada 500ms
  21.         g.setColor(Color.RED);
  22.         g.fillOval(posX, posY, 70, 70);
  23.     }
  24.    
  25.     public void run() {
  26.         while(true) {
  27.             try {
  28.                 //la bolita se movera cada 500ms
  29.                 Thread.sleep(500);
  30.                
  31.                 //hacemos las validaciones
  32.                 if(posX < 0 || posX >= this.getWidth()) {
  33.                     //si es menor a 0 o es mayor a lo que mide el ancho de la pantalla significa que debe rebotar
  34.                     //entonces el incremento será negativo
  35.                     incX = -incX;
  36.                 }
  37.                
  38.                 //la nueva posicion en X es, la actual más el incremento
  39.                 posX += incX;
  40.                 //y repintamos
  41.                 repaint();
  42.             } catch(Exception ex) {}
  43.         }
  44.     }

Obviamente si kieres que la pelota se mueva en Y has lo msimo que con X pero con Y xD
__________________
De nada, hay te encargo +1...

Etiquetas: applet, clase, hilos, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:07.