![]() |
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? |
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()Se bueno. |
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? |
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.