2011-08-26 15 views
5

Acabo de empezar a aprender conceptos básicos sobre la clase Graphics2D, hasta ahora puedo dibujar diferentes objetos e implementa ActionListener para moverlos realmente en pantalla por onKeyPress. Hasta aquí todo bien, mientras pensaba en hacer algo más complicado. Quiero dar una ruta de a mi objeto y animarla solo en esa ruta particular.Cómo animar rectángulos en un objeto Path2D en el contexto Graphics2D

Algo así como, voy a trazar una línea en el cielo y un avión debe quedarse con esa línea dibujada y mantenerlo para volar en esa línea en particular. Ahora es posible?

No necesito ningún tipo de código, pero pocos métodos o ideas diferentes me permitirán comenzar a trabajar en esto. A visualizar la elaboración de mi idea es la siguiente.

Punto de inicio:

enter image description here

Punto final:

enter image description here

Ahora bien, como se muestra arriba, mi caja amarilla (en el plano futuro) debe pegarse con trayectoria dada mientras se anima (línea gris del camino)

Mi investigación hasta el momento,

he buscado mis palabras de moda tales como la ruta en Java, y se encontró Path2D y GeneralPath clases, ¿Alguien sabe si puedo usar eso para solucionar esto.

Gracias

+0

¿Qué dice su javadoc? http://download.oracle.com/javase/6/docs/api/java/awt/geom/Path2D.html –

+0

Gracias JB Lo leí antes, pero no pude entender, pero a continuación la respuesta ha aclarado y elaborado el concepto subyacente. – doNotCheckMyBlog

Respuesta

2

¡Estupendo!

Me recuerda a mis primeros pasos en TI. Cuánto disfruté de todo este simple material de matemáticas, pero eso hace que las cosas se muevan en la pantalla. :)

Lo que necesita es en realidad una interpolación lineal.Hay otros tipos de interpolación y algunos API ofrecen una buena encapsulación para el concepto, pero aquí es la idea principal, y usted muy a menudo necesitan estas cosas:

debe reescribir su camino

y = f (x) 

como función del tiempo:

en el momento 0 el artículo estará en posición de inicio, en el tiempo 1 llegará al final. Y luego incrementa el tiempo (t) como desee (0.001 cada ms, por ejemplo).

Así que aquí es la fórmula para una trayectoria lineal simple:

x = xstart + (xend-xstart) * t 
y = ystart + (yend-ystart) * t 

cuando t varía, es objeto se acaba de mover de forma lineal a lo largo del camino, de forma lineal tiene una velocidad será constante en toda la ruta. Se podría imaginar algún tipo de atracción gravtity al final, por ejemplo, esto podría ser modelado por una aceleración cuadrática (t^2 en lugar de t) ...

Saludos, Stephane

+0

Buena explicación, consideraré tu fórmula para animar. Gracias ... ¡Disfruta NHL! – doNotCheckMyBlog

1

En primer lugar, hacer que la capacidad de moverse del punto A al punto B. Esto se hace con álgebra simple.

En segundo lugar, tome la capacidad de tomar un camino y traducirlo en puntos. Luego, cuando vas a hacer curvas, realmente solo te estás moviendo de un punto a otro para apuntar a lo largo de esa curva.

Esta es la forma más elemental de hacerlo y funciona para la mayoría de los casos.

+0

Entonces, ¿puedo crear una ruta por Path2D y llamar al método y getIteratorPath me dará información con respecto a la ruta? tal y x, y posiciones en el camino? Eso suena bastante fácil, déjame comenzar, gracias glowcoder – doNotCheckMyBlog

1

Lo que está hablando es simple gráficos 2D y sprites. Si eso es todo lo que necesita, entonces para Java, eche un vistazo a Java 2D Sprites. Si se inclina más hacia las perspectivas de la cámara o desea verlas desde diferentes ángulos, vaya con Java 3D from the OpenSource Java 3D.org. De cualquier manera, lo que quiere es una traducción simple del objeto a lo largo de una línea, bastante simple en 2D o 3D.

1

Usted puede intentar Va a través del código de mi proyecto de universidad de código abierto - LANSim. Su código está disponible en el menú Código. Es similar a lo que estás tratando de hacer.

+0

Gracias por compartir, se ve bien lo voy a ver con seguridad – doNotCheckMyBlog

Cuestiones relacionadas