Problema con Thread

Iniciado por 1mpuls0, 6 Abril 2010, 07:03 AM

0 Miembros y 1 Visitante están viendo este tema.

1mpuls0

 ;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

abc

Leyer

#1
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.

1mpuls0

#2
Cita de: 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.

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 (java) [Seleccionar]

private void dibujarLineasV(Graphics g, int ancho, int largo)
{
g.setColor( color() );
for(int l=20; l<=largo; l+=(largo/2)-20)
{
for(int c=60; c<=ancho-20; c++)
{
g.drawLine( l, c, l, c );
try{ Thread.sleep(1);}catch(InterruptedException excepcion){System.out.println(excepcion);}
}
}
}


gracias por responder
abc

Leyer

#3
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.

1mpuls0

Ok, muchas gracias LEYER,
rayos tendre que buscar otra forma  :xD de hacerlo

Saludos
abc

Debci

Prueba a dibujar las lineas por segmentos mas pequeños, esperando unos segundo entre cada una.

Saludos

egyware

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: egywaremain
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