pelota imagenes animación animacion java swing animation rotation

imagenes - Animación de Java: imagen giratoria



animacion de imagenes java (1)

Voy a suponer que entiendes cómo rotar una imagen una vez. Si no lo hace, probablemente pueda encontrarlo con una búsqueda rápida en Google.

Lo que necesitas es un proceso en segundo plano que lo haga girar por ti. Funciona así:

/** * Warning - this class is UNSYNCHRONIZED! */ public class RotatableImage { Image image; float currentDegrees; public RotateableImage(Image image) { this.image = image; this.currentDegrees = 0.0f; this.remainingDegrees = 0.0f; } public void paintOn(Graphics g) { //put your code to rotate the image once in here, using current degrees as your rotation } public void spin(float additionalDegrees) { setSpin(currentDegrees + additionalDegrees); } public void setSpin(float newDegrees) { currentDegrees += additionalDegrees; while(currentDegrees < 0f) currentDegrees += 360f; while(currentDegrees >= 360f) currentDegrees -= 360f; } } public class ImageSpinner implements Runnable { RotateableImage image; final float totalDegrees; float degrees; float speed; // in degrees per second public ImageSpinner(RotatableImage image, float degrees, float speed) { this.image = image; this.degrees = degrees; this.totalDegrees = degrees; this.speed = speed; } public void run() { // assume about 40 frames per second, and that the it doesn''t matter if it isn''t exact int fps = 40; while(Math.abs(degrees) > Math.abs(speed / fps)) { // how close is the degrees to 0? float degreesToRotate = speed / fps; image.spin(degreesToRotate); degrees -= degreesToRotate; /* sleep will always wait at least 1000 / fps before recalcing but you have no guarantee that it won''t take forever! If you absolutely require better timing, this isn''t the solution for you */ try { Thread.sleep(1000 / fps); } catch(InterruptedException e) { /* swallow */ } } image.setSpin(totalDegrees); // this might need to be 360 - totalDegrees, not sure } }

Tengo una tarea de animación muy simple para Java. Necesito crear una "Rueda de Fortune Applet" básica. Básicamente lo que se mostrará es una rueda y un botón. Cuando se presiona ese botón, quiero que seleccione un número aleatorio de grados (por ejemplo, en el rango de 720-3600) y gire la rueda tantos grados. Luego usaré un poco de lógica para convertir ese número de grado a un valor monetario. Mi problema está en la animación, ¿cómo puedo hacer que una imagen gire a un ritmo constante para x número de grados? ¿Hay una función de swing para eso? La ayuda sería muy apreciada, no necesito saber nada más sobre la animación de Java ahora además de eso.