Incremento exponencial en lugar de lineal
Buenas, amigos de Java; mi duda es la que sigue:
Escribí un programa que dibuja un globito (un círculo sencillo en un panel con Graphics) y le coloqué un temporizador para que subiera diez pixeles cada segundo.
El problema es que, el primer segundo sube como debe, 10 px, el segundo sube 20px, esto lo pude comprobar colocando un JTextField que muestra el valor de Y cada vez que se vuelve a dibujar el globo y va incrementando el valor que resta a la posición Y de mi dibujo, lo correcto para este programa es que el primer dibujo se realizara en 235, el segundo en 225, el tercero en 215 y así, anexo el código para que lo examinen y me puedan decir porqué está funcionando de esa manera incorrecta, gracias de antemano a todos.
- Inicie sesión o regístrese para enviar comentarios
Podrías usar un wait
Hola, viendo tu programa creo que podrías hacer uso de un wait dentro del método actionPerformed, sería como temporizador.wait(1000); (encerrándolo en un bloque try-catch junto con todo lo demás para que se pinte el globo, abarcando desde Graphics papel...). Eso haría yo.
Lo intentaré
Ah, muchas gracias, voy a intentarlo y avisaré del resultado :D
Tal vez pudieras resolverlo de otra forma
Mira te dejo este código, aunque no se si te sirva, lo que hago es tener una clase que herede java.util.Observable y ahí realizo todo el trabajo.
Lo que logré es tener la vista en una clase, después al botón le implemente un actionlistener para que escuche el evento al ser pulsado y, cuando esto sucede, se ejecuta el timer y se pone en marcha todo lo demás.
Main
Vista
Controlador
Timer
Saludos
Inicialízalo en la declaración...
Oye si todavía es oportuno, solo tienes que inicializarlo en la declaracion, en ves de hacerlo en el actionPerformed, de esta manera realiza el incremento lineal como lo quieres...
lo demás lo dejas igual...
Ya te respondió Arturo. Pero
Ya te respondió Arturo.
Pero ahí va otra explicación, si comentas la línea donde limpias el dibujo:
Te darás cuenta de que sí está haciendo el dibujo cada vez con y - 10, lo que pasa es que cada vez que lo haces, llamas al método
que a su vez crea otro timer the hace lo mismo, el resultado es que cada vez es más rápido y solo puedes ver como se decrementa exponencialmente.