2010-05-26 6 views
7

Ich versuche eine Schachfigur in einem Board zu animieren. Zuerst habe ich ein java.util.Timer-Objekt erstellt, das "scheduleAtFixedRate" eine TimerTask als Proxy-Funktion implementiert hat. Also habe ich eine Aufzeichnung des zu bewegenden Stücks (Stück-Bewegung-Aufzeichnung) und wenn es angemessen ist (wenn der Benutzer das Stück mit der Maus bewegt), sollte die TimerTask-Proxy-Funktion getestet werden, wenn der Datensatz nicht Null ist und die Stück- Bewegungsfunktion. Die Stückbewegungsfunktion aktualisiert nur die X- und Y-Koordinaten des Stücks gemäß einem zuvor berechneten Vektor. Ich habe eine zusätzliche Uhr auf die Stück-Bewegungs-Aufzeichnung gelegt, so dass sie, wenn sie sich ändert, die Tafel (Leinwand) neu streichen sollte. Die Malmethode testet, ob diese Stück-Bewegungs-Aufzeichnung nicht Null ist, um sie zu malen.Wie macht man Animation mit Swing und Clojure?

Das Problem ist, dass die Animation nicht angezeigt wird. Das Stück springt einfach auf das Schicksal, ohne die Bewegung dazwischen. Es gibt ein Problem mit dem Animationsschema ou gibt es einen besseren Weg, es zu tun?

Antwort

2

Updates Komponenten Swing sollte auf dem Event Dispatch Thread (EDT) erfolgen. Sie sollten also einen Swing-Timer verwenden, da jeder Code, der beim Zünden des Timers ausgeführt wird, auf dem EDT ausgeführt wird.

Alles, was Sie tun müssen, ist den Ort der Schachfigur festzulegen, und es wird sich automatisch neu streichen.

Lesen Sie den Abschnitt aus dem Swing-Tutorial auf How to Use Timers für weitere Informationen.

+0

Sie haben Recht, der Zug funktioniert jetzt, ist aber immer noch nicht weich genug, würde die Schwungzeiten mehr prüfen. Danke für deine Antwort. –

+0

Sie müssen ** ** ** ** ** Swing Timer ** nicht verwenden, um Ihre Komponenten zu animieren. Sie können einen Timer mit dem * was auch immer * Dienstprogramm einrichten, und dann die Ausführung an EDT mit ** SwingUtilities.invokeLater ** (oder ** invokeAndWait **) übergeben. – SkyDan

1

Swing macht keine automatische Animation, egal ob Sie einen Timer haben oder nicht. Wenn Sie Bewegung animieren möchten, müssen Sie das Stück um eine Strecke nach dem anderen bewegen und die Leinwand bei jeder Bewegung neu streichen, so dass es die Illusion gibt, sozusagen von Bewegung zu sprechen.

+0

Genau das mache ich, wenn das Stück sich bewegt, wird die Repaint-Methode von Canvas über add-watch aufgerufen. –

0

Es gibt eine Animator-Demo im JDK. Es benutzt awt, aber es sollte dir einige Ideen geben.

jdk1.6.0_20 \ demo \ Applets \ Animator

1

können Sie Trident-Bibliothek verwenden: Here

+0

Sollte versuchen, clojure mit Swing scheint mir schwer. –

0

Eine andere Idee könnte es sein, das Processing Visualization Framework von processing.org zu betrachten. Es ist eine einfache, aber leistungsfähige und gut dokumentierte Programmiersprache für Animation und Visualisierung. Die API ist sehr einfach und hat einen sehr transparenten Clojure-Wrapper namens Rosado.

Verwandte Themen