1 Animation (Doublepuffering) Vorlesung: Datenverarbeitung Grundlagen 3 Fachbereich II - Mathematik Rolf Heitzenröder.

  • Published on
    05-Apr-2015

  • View
    104

  • Download
    2

Embed Size (px)

Transcript

  • Folie 1
  • 1 Animation (Doublepuffering) Vorlesung: Datenverarbeitung Grundlagen 3 Fachbereich II - Mathematik Rolf Heitzenrder
  • Folie 2
  • Animation 2 Einfhrung In Java ist es mglich sogenannte Animationen zu erstellen. In einer mglichen Vorgehensweise wird schrittweise die Position des Bildes (Image) versetzt. Dies wird auch Cutout-Animation genannt. Eine zweite Mglichkeit ist, eine Folge von Bilder in der richtigen Reihenfolge nacheinander darzustellen. Diese Methode nennt man auch Cartoon-Stil, es ist die gleiche Vorgehensweise wie bei einem Zeichentrickfilm.
  • Folie 3
  • Animation 3 Durch die einfache Darstellung der Bilder auf der Zeichenflche entsteht ein unschner Effekt. Die Animation flackert. Das Flackern hat folgende Ursache: Vor dem Aufruf der paint - Methode wird der Hintergrund der Animation gelscht. D.h. der ganze Bereich wird in der Hintergrundfarbe neu gezeichnet. Die gebruchlichste Methode das Flackern zu um gehen ist das Implementieren einer Doppelpufferung: DoubleBuffering arbeitet mit mehreren verschiedenen Graphic - Objekten. Deklarieren der Bilder und des Graphickontext Image bild; BufferedImage offBild; offBild = new BufferedImage(200,200, BufferedImage.TYPE_INT_RGB); Graphics2D offGraphic;
  • Folie 4
  • Animation 4 Zuerst wird ein Graphik-Objekt des Offscreen-Bildes, offBild erstellt. offGraphic = offBild.createGraphics(); In diesem Graphik-Kontext werden dann die notwendigen Operationen ausgefhrt. Man kann zum Beispiel, die neue Positon des Bildes bzw. ein neues Bild dort einfgen. offGraphic.drawImage(bild[i], (offBild.getWidth()/2)- (bild[i].getWidth(this)/2), (offBild.getHeight()/2)- (bild[i].getHeight(this)/2), this); Das Image-Array bild[] beinhaltet fr die Cartonn-Animation alle Images die fr die Darstellung bentigt werden. Die nchsten zwei Parameter sind die Position, wo das Image zuerst im Graphik-Kontext des Offscreen-Bildes liegt Nach dem kompletten malen (aufbereiten des unsichtbaren Graphik- Kontext) wird das Image mit drawImage(offBild, x, y, ImageObserver);
  • Folie 5
  • Animation 5 auf den Graphik-Kontext des Panel kopiert. Dies kann deshalb funktionieren, da der Graphik-Kontext praktisch / bildlich gesehen mit dem zugehrenden Image immer noch verbunden ist. Alles was mit dem Graphik-Kontext (Objekt) geschieht wird auch auf dem Image vollfhrt. Das Praktische dabei ist, dass der Graphik-Kontext des Image und der des Panel vom gleichen Objekt-Typ sind. Sie sind also mit einander Kompatibel. So kann man das vernderte Offscreen-Image (in dem ja das normale Image eingefgt worden ist bzw. die Postion verndert wurde) in dem Panel schlielich an sehen.
  • Folie 6
  • Animation 6 BufferdImage Im JDK 1.2 gibt es die Klasse (Programmierhandbuch und Referenz, von Stefan Middendorf, Reiner Singer) BufferedImage, die direkt ein Offscreen-Image reprsentiert. Bei einem createImage()-Aufruf mit ist das zurckgelieferte Image- Exemplar vom Typ BufferedImage. Das ist deshalb mglich, da BufferedImage von Image abgeleitet ist. java.lang.Object -> java.awt.Image -> java.awt.image.BufferedImage Ein BufferedImage kann man auch direkt mit Hilfe des new-Operators angelegen: BufferedImage b_image = new BufferedImage (int x, int y, BufferedImage.TYPE_INT_RGB); Mit folgender Zeile erhlt man das Graphics-Objekt des oben erstellten Bildes: Graphics b_imageGraphics = b_image.getGraphics(); In diesen Grafikkontext wird auf dieselbe Weise gezeichnet, wie in den Grafikkontext, der paint() -Methode bergeben wird.

Recommended

View more >