Wiosenna symulacja zachowania
Zasadniczo chcę symulować zachowanie wiosenne na malowanym obrazie. Chcę, aby przebiegał przez kilka iteracji skalując go w górę iw dół (tak jak w przypadku sprężyny).
Wszystkie przykłady znalezione w sieci prowadzą do tej klasy -FloatSpring.java
Powinien zapewniać niezbędne obliczenia, aby przenieść punkt A do punktu B, stosując efekt sprężynujący, który zależy od różnych ustawień klasy FloatSpring. Problem polega na tym, że nie znalazłem ani jednego jasnego przykładu, jak prawidłowo go używać.
Zrobiłem ten mały przykład do przetestowaniaFloatSpring
na:
public static void main ( String[] args )
{
// Some image to bounce
final ImageIcon icon =
new ImageIcon ( WebProgressOverlayExample.class.getResource ( "icons/ava1.jpg" ) );
// Component to paint image on
JComponent spring = new JComponent ()
{
// Zoom value (1f = 100% = normal size)
float zoom = 1f;
{
// Basic spring settings
final FloatSpring fs = new FloatSpring ( 100 );
fs.setPosition ( zoom );
// Animation delay
final int delay = 1000 / 24;
// Animator
new Timer ( delay, new ActionListener ()
{
private float elapsed = 0f;
public void actionPerformed ( ActionEvent e )
{
// Increasing elapsed time and updating spring
elapsed += delay;
fs.update ( 3f, elapsed );
// Updating zoom value and component
zoom = fs.getPosition ();
repaint ();
}
} ).start ();
}
protected void paintComponent ( Graphics g )
{
super.paintComponent ( g );
// Scaled image
int width = Math.round ( icon.getIconWidth () * zoom );
int height = Math.round ( icon.getIconHeight () * zoom );
g.drawImage ( icon.getImage (), getWidth () / 2 - width / 2,
getHeight () / 2 - height / 2, this );
}
public Dimension getPreferredSize ()
{
return new Dimension ( 500, 500 );
}
};
JFrame frame = new JFrame ();
frame.add ( spring );
frame.pack ();
frame.setLocationRelativeTo ( null );
frame.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
frame.setVisible ( true );
}
W tym przykładziezoom
własność powinna się odbić1f do3f w ramach cyklu czasowego i na koniec poprowadzić wyświetlany obraz komponentu do zoomu 3X. Coś jak proste animowane przejście.
Klasa FloatSpring powinna być w porządku - po prostu nie rozumiem, jak prawidłowo jej używać. Dokładnie - co powinienem określić jakospringK
idampingK
wartości, a takżetime
cel nieruchomości jest niejasny ...
Byłbym wdzięczny za każdą pomoc.