Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Java (http://www.forosdelweb.com/f45/)
-   -   Detener objeto (http://www.forosdelweb.com/f45/detener-objeto-392199/)

Erume 09/05/2006 12:35

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?

chuidiang 09/05/2006 13:28

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.

Erume 11/05/2006 08:38

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?

chuidiang 11/05/2006 09:27

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.


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

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.