2011-08-26 12 views
5

Ho appena iniziato a imparare le nozioni di base sulla classe Graphics2D, Finora sono in grado di disegnare diversi oggetti e implementa ActionListener per spostarli effettivamente sullo schermo entro il onKeyPress. Fin qui tutto bene, mentre pensavo di fare qualcosa di più complicato. Voglio dare un percorso al mio oggetto e animarlo solo su quel particolare percorso.Come animare Rectangle su un oggetto Path2D nel contesto Graphics2D

Qualcosa del genere, disegnerò una linea sul cielo e un aereo dovrebbe rimanere con quella linea disegnata e mantenere se stesso per volare su quella linea particolare. Ora è possibile?

Non ho bisogno di alcun tipo di codice, ma pochi metodi o idee diversi mi permetteranno di iniziare a lavorare su questo. Un'elaborazione visiva della mia idea è la seguente.

Punto di partenza:

enter image description here

Punto d'arrivo:

enter image description here

Ora, come mostrato sopra, la mia scatola gialla (nel piano futuro) dovrebbe bastone con percorso determinato durante l'animazione (linea grigia del percorso)

La mia ricerca finora,

Ho cercato le mie parole d'ordine come percorso in java, e ha trovato Path2D e GeneralPath classi, qualcuno sa se posso usare che per risolvere questo.

Grazie

+0

Cosa dicono i loro javadoc? http://download.oracle.com/javase/6/docs/api/java/awt/geom/Path2D.html –

+0

Grazie JB L'ho letto prima ma non riuscivo a capire, ma la risposta qui sotto ha chiarito ed elaborato il concetto sottostante. – doNotCheckMyBlog

risposta

2

Grande!

Mi ricorda i miei primi passi nell'IT. Quanto mi è piaciuto tutto questo semplice materiale matematico ma che fa muovere le cose sullo schermo. :)

Quello che ti serve è in realtà un'interpolazione lineare.Ci sono altri tipi di interpolazione e di alcune API offrono una piacevole incapsulamento per il concetto, ma qui è l'idea principale, e sarà molto spesso bisogno di questa roba:

è necessario riscrivere il percorso

y = f (x) 

come funzione del tempo:

al momento 0 l'articolo sarà in posizione di partenza, al tempo 1 raggiungerà la fine. E quindi si incrementa il tempo (t) come si desidera (0,001 ogni ms per esempio).

: ecco la formula per un percorso lineare semplice:

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

quando t varia, è oggetto verrà basta spostare linearmente lungo il percorso, ha linearmente la velocità sarà costante su tutto il percorso. Si potrebbe immaginare una sorta di attrazione gravtity alla fine, per esempio, questo sarebbe modellato da un'accelerazione quadratica (t^2 invece di t) ...

saluti, Stephane

+0

Bella spiegazione, prenderò in considerazione la tua formula per animare. Grazie ... Godetevi NHL! – doNotCheckMyBlog

1

In primo luogo, rendere la capacità di spostarsi dal punto A al punto B. Questo è fatto con l'algebra semplice.

In secondo luogo, rendere la possibilità di prendere un percorso e tradurlo in punti. Poi, quando intendi fare le curve, ti stai semplicemente spostando da un punto all'altro a un altro lungo quella curva.

Questo è il modo più semplice per farlo e funziona per la maggior parte delle istanze.

+0

Quindi posso creare il percorso per Path2D e chiamare il metodo such e getIteratorPath mi fornirà informazioni sul percorso? tali e x, posizioni y sul percorso? Quello suona abbastanza facile, fammi iniziare, Grazie glowcoder – doNotCheckMyBlog

1

Ciò di cui stai parlando è una semplice grafica 2D e sprite. Se questo è tutto ciò che serve allora per Java dai un'occhiata a Java 2D Sprites Se ti stai più inclinando o finirai con le prospettive della fotocamera e vuoi vedere l'animazione da angolazioni diverse, vai con Java 3D from the OpenSource Java 3D.org. In entrambi i casi ciò che desideri è una semplice traduzione dell'oggetto lungo una linea, piuttosto semplice sia in 2D che in 3D.

1

Si può provare in corso attraverso il codice del mio progetto college open source - LANSim. Il codice è disponibile nel menu Codice. Fa qualcosa di simile a quello che stai cercando di fare.

+0

Grazie per la condivisione, sembra buono, lo cercherò di sicuro – doNotCheckMyBlog

Problemi correlati