Foro de elhacker.net

Programación => Java => Mensaje iniciado por: 1mpuls0 en 6 Abril 2010, 07:03 am



Título: Problema con Thread
Publicado por: 1mpuls0 en 6 Abril 2010, 07:03 am
 ;D, bueno ahora vengo aqui a pedirle ayuda, estoy haciendo un programa pero utilizo graphics, necesito dibujar unas lineas, y si lo hace pero las dibuja de golpe, y lo que quiero es que muestre el pintado como si fuera una linea animada, utilice un treah para pausar el pintado, pero creo que tengo que manejarlo en una clase aparte  :-X y la verdad no soy bueno con hilos.


 :silbar:


Saludos



Título: Re: Problema con Thread
Publicado por: Leyer en 6 Abril 2010, 08:32 am
Debes de estar bromenado :xD usar un hilo en esa forma de implementacion en que lo tienes es casi imposible y mas para hacer lo <=7 veces, le busque unas vueltas pero :-X WTF.


Título: Re: Problema con Thread
Publicado por: 1mpuls0 en 6 Abril 2010, 09:01 am
Debes de estar bromenado :xD usar un hilo en esa forma de implementacion en que lo tienes es casi imposible y mas para hacer lo <=7 veces, le busque unas vueltas pero :-X WTF.

A que te refieres con esa forma de implementación??
lo unico que quiero es que se muestre el pintado de las lineas

amm en un programa anterior que hice hace mucho tiempo si me muestra el pintado, pero aqui no sé que pasa  :-\
por eso pense qeu deberia manejar una clase aparte  :P

Código
  1. private void dibujarLineasV(Graphics g, int ancho, int largo)
  2. {
  3. g.setColor( color() );
  4. for(int l=20; l<=largo; l+=(largo/2)-20)
  5. {
  6. for(int c=60; c<=ancho-20; c++)
  7. {
  8. g.drawLine( l, c, l, c );
  9. try{ Thread.sleep(1);}catch(InterruptedException excepcion){System.out.println(excepcion);}
  10. }
  11. }
  12. }
  13.  

gracias por responder


Título: Re: Problema con Thread
Publicado por: Leyer en 6 Abril 2010, 09:08 am
Me refiero a cuando haces el switch, para colocarlo como dices tendrias que meter casi todo de los case en un hilo o mas, modificando los parametros del metodo dibujarCodificaciona a finales para que hilo pueda tener acceso a estos,el cual modificaria casi todo la implementacion de tu metodo, y eso hace q sea casi imposible te lo aseguro tandrias que modificar muchas cosas y no basta con hacer un sleep por que esto congelaria tu interfaz.

Un Salu2.


Título: Re: Problema con Thread
Publicado por: 1mpuls0 en 6 Abril 2010, 09:14 am
Ok, muchas gracias LEYER,
rayos tendre que buscar otra forma  :xD de hacerlo

Saludos


Título: Re: Problema con Thread
Publicado por: Debci en 6 Abril 2010, 14:58 pm
Prueba a dibujar las lineas por segmentos mas pequeños, esperando unos segundo entre cada una.

Saludos


Título: Re: Problema con Thread
Publicado por: egyware en 8 Abril 2010, 01:31 am
Respondere independientemente si te constestaron en tu problema.
Sinceramente todo lo que es graficos siempre se hace en 1 solo Thread es asi porque piensa que manejar 1 solo dispositivo con 2 Threads, 2 personas tratando de usar una sola cosa es algo imposible (se puede pero se turnan)
Bueno descartando usar Threads(solo usa el principal) tienes que pensar de otra manera, bueno como yo programo videojuegos lo pienso asi:
  • Debes hacer que tu programa corra a una cierta velocidad, (puedes hacer un while que la ultima sentencia duerma algunos milisegundos)
  • Hacer que tu sprite (linea animada) se anime =P
Como hacer que tu linea se anime, se me ocurre obiar el repintado y hacer que un punto recorra una trayectoria.
Ejemplo esta formula
P(t) = Po + V(t)*t +A(t)*t*t/2
Esta formula hace que un punto se mueva desde Po en un instante t=0 a un punto P(tf) en un instante tf (Rayos Fisica)
jajaja
depende si haces V(t)= Vo constante y A(t) = NULO (matemático) haces una recta animada, si haces que A constante haces que la linea acelere o si haces la función V(t) = (cos(t),sen(t)) puedes hacer un circulo animado.
Me fui muy matematico parece pero es la unica solución MAS SENCILLA (tengo otra) y general
te dejare algo de PSEUDO CODIGO
Cita de: egyware
main
tiempo = 0
v = constante
while (hasta que stop sea true)
x = v * tiempo
y = v * tiempo
//Nota 1
pintarPunto(x,y)
//Nota 2
añadir una unidad a tiempo
dormir 16 miliseg // Esto es mas o menos 60 FPS
while end
end main
En la nota 1 puedes borrar lo anterior o en la nota 2 aplicas tecnica del doble buffer osbiamente esto produce un punto moviendose para lo que tu quieres ignora siemplemente.
Saludos espero que te sirva te algo