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

Detener objeto

Estas en el tema de Detener objeto en el foro de Java en Foros del Web. Hey!. Vereis, tengo un objeto que al hacer click sobre un componente, se desplaza hasta el lugar donde se ha producido el click. Debe pararse ...
  #1 (permalink)  
Antiguo 09/05/2006, 12:35
 
Fecha de Ingreso: marzo-2006
Mensajes: 106
Antigüedad: 18 años, 2 meses
Puntos: 0
Detener objeto

Hey!.
Vereis, tengo un objeto que al hacer click sobre un componente, se desplaza hasta el lugar donde se ha producido el click. Debe pararse justo en el punto donde se pulsó el ratón. La cosa es que al ir comparando sin parar la variable de posicion del objeto con su meta, el programa se me traba y me va lentísimo, porque uso un while hasta que llegue a donde se pulsó y detenerlo. ¿Como puedo chequear esto sin que se me pete el programa?
__________________
"El río más profundo siempre es el más silencioso"
  #2 (permalink)  
Antiguo 09/05/2006, 13:28
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Hola:
Para que el programa no se "trabe" lanza un hilo separado para hacer eso.

Lo del hilo es así

Código:
Thread hilo = new Thread (new Runnable()
{
   public void run()
   {
      while (...)
      {
          ...
      }
   }
});
hilo.start();
Si no lanzas el hilo te está pasando lo siguiente. El código del click de ratón java lo ejecuta en el mismo hilo que refresca y pinta las ventanas. Si terminas rápido el método, las ventanas se quedan sin refresco y el programa da la sensación de estar colgado. Por ello, cuando al pulsar un botón, hacer un click o cualquier otro evento de ratón preveas que vas a tardar, es mejor lanzar un hilo que haga esa tarea y devolver el control a java rápidamente.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 11/05/2006, 08:38
 
Fecha de Ingreso: marzo-2006
Mensajes: 106
Antigüedad: 18 años, 2 meses
Puntos: 0
Aprovecho este hilo para preguntar otra cosa relacionada...

En java las posiciones se miden por enteros?. Me explico, cada objeto tiene una imagen, y se va dibujando en su posición. El método que dibuja la imagen en cada momento recibe como parámetros enteros. Así que la posición de un objeto (donde está dibujada) se maneja con enteros, no?.

Ahora viene el problema. Quiero que el objeto se desplace de un lugar a otro ( de momento en linea recta) con una velocidad v, siempre la misma. Pero claro, depende de hacia adonde apunte el vector de la velocidad (espero estar explicandome bien), la velocidad sobre el eje x y el eje y variará. Para calcular la velocidad sobre los ejes tengo que recurrir a senos y cosenos y ... plaf. Al convertirlos a enteros para variar la posición, me trunca todo el decimal, y teniendo en cuenta que los senos y cosenos van de -1 a 1... pues al final me va a una posición bastante alejada, porque las velocidades han sido suuuper redondeadas ( no se si se me entiende).

Como puedo solucionar esto?
__________________
"El río más profundo siempre es el más silencioso"
  #4 (permalink)  
Antiguo 11/05/2006, 09:27
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Hola:

Efectivamente las posiciones van en enteros, porque estás pintando pixels en pantalla. El primer pixel es el 0, el segundo el 1, etc. No hay pixel 1,35883.

Lo que debes hacer es echar las cuentas y guardarte los valores en variables double o float. Convertir sólo a entero en el momento justo de pintar y sólo para pintar, manteniendo el antiguo valor float en su sitio.

Para redondear en el momento de pintar, usa Math.round(), así te dará el entero más cercano y 7,9 te lo pondrá como 8, y no como 7

Se bueno.
__________________
Apuntes Java
Wiki de Programación
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 03:05.