Skip to content

Tutorial 2: Hinzufügen von Animationen

lichtsprung edited this page Apr 26, 2011 · 2 revisions

Das Framework unterscheidet zwei Arten von Animationen.

  1. Direkte Manipulation der Objektdaten
  2. Verwendung von Transformationen wie Translation, Rotation und Skalierung.

Als erstes soll die einfachste Form der Animation vorgestellt werden. Hierbei wird über einen direkten Zugriff auf die Daten des Objekts die Erscheinung (Position, Farbe, etc.) verändert. Dies bietet sich zum Beispiel bei der Animation von bewegten Teilkomponenten an (z.B. ein pulsierender Button oder das Wachsen eines Fortschrittbalkens). Die Funktionsweise solcher Animationen soll am Beispiel aus dem letzten Tutorial verdeutlicht werden. Es soll dabei so erweitert werden, dass die Linie sich über einen Zeitraum von 100 Frames wächst.

Eine Animation implementiert das Interface Animation und wird dem jeweiligen Objekt über die setAnimation Methode hinzugefügt.

Line2d line = new Line2d(400, 400, 450, 400);
Animation lineAnimation = new Animation<Line2d>() {
      private int x;

      @Override
      public void animate() {
        if (x++ < 100) {
          getShape().y2--;
        }
      }
    };
line.setAnimation(lineAnimation);

Im Fall einer so einfachen Animation bietet es sich an, keine konkrete Klasse für die Animation zur erstellen, sondern sie als anonyme Klasse zu beschreiben. Das Animation-Interface verwendet Generics, damit im späteren Verlauf direkt über die getShape Methode auf die korrekten Datenfelder zugegriffen werden kann.

Als nächstes muss der Szene ein Animator übergeben werden, der sich um die Aktualisierung der Szene kümmert. Dieser wird mit folgender Zeile erstellt.

Animator animator = new Animator(10);

Die Zahl im Konstruktor ist die Anzahl der Frames per Second. Die Animatorinstanz muss nur noch der Szene hinzugefügt werden und die Animation ist beim nächsten Aufruf des Programms sichtbar.

scene2d.setAnimator(animator);

Das fertige Programm sieht nach den Änderungen so aus.

SceneGraph sceneGraph = new SceneGraph();
Line2d line = new Line2d(400, 400, 450, 400);
Animation lineAnimation = new Animation<Line2d>() {
      private int x;

      @Override
      public void animate() {
        if (x++ < 100) {
          getShape().y2--;
        }
      }
    };
line.setAnimation(lineAnimation);
sceneGraph.addGeometry(line);
sceneGraph.addGeometry(new Triangle2d(50, 200, 200, 200, 125, 50));

RenderVisitor visitor = new RenderVisitor();
visitor.setRenderer(new RendererJ2d(800, 600));

Scene2d scene2d = new Scene2d();
scene2d.setScenegraph(sceneGraph);
scene2d.setRenderVisitor(visitor);

Animator animator = new Animator(10);
scene2d.setAnimator(animator);

scene2d.start();

Im nächsten Tutorial schauen wir uns die Animation mit Transformationsobjekten im Szenengraph an.

Clone this wiki locally