Graphic PIZiadas

Graphic PIZiadas

Meine Welt ist in..

Programación gráfica: Doblebuffering : Zeichnen im Hintergrund [JAVA]

doblebufferBei der Erstellung des Animations-Engine haben wir gesehen, dass der Bildschirm refresh Flimmern auftritt unerwünscht. Dieser Effekt ist auf die Zeit, die erforderlich, um das Bild zu löschen und einen neuen aktuellen, Ergebnis der belebten Objekte.

Eine Technik, um dies zu vermeiden ist die sogenannte Doppelpuffer oder “doublebuffered, so wir zwei Bilder verwenden (grafische Erinnerungen) zur gleichen Zeit. Beim Zeichnen in einem, Wir sehen den anderen und Zeit des Wechsels zwischen den Bildern vor Ort entfällt das Flimmern minimiert.

In informática, Mehrfachpufferung ist die Verwendung von mehr als einen Puffer weiterhin einen Datenblock, so dass eine “Leser” Sie sehen eine vollständige Version der Daten, statt eine teilweise modernisierte Version der Daten, die durch entsteht ein “Schriftsteller”. Es wird auch verwendet, um die Dual-Port-RAM zu verwenden zu vermeiden, Wenn die Leser und Schreiber sind verschiedene Geräte.(W)

Wir werden die Klasse ändern. “Blackboard” das wir wurden geändert, um zu übernehmen die Animations-Engine um diese Technik zu implementieren. Wir müssen wissen, das Maß für das Grafikdisplay, genügend Speicher zu speichern, und wir definieren ein Objekt “Bild” Es wird sein, welche Grafiken zeichnen wird.

	Dimension d;
	private MImage Bild = Null;

Verfahren “malen” Zeichnen Sie erhalten ersten die Größe des Bildes zu. Der Aufruf der Funktion “checkOffScreenImage()” um sicherzustellen, dass ein Objekt wird “mImage” auf die Auslosung.

Um dieses Objekt zu zeichnen bitten wir um Ihre Grafik-Adresse mit der Funktion “Microsoft.WindowsMobile.DirectX.Direct3D.Surface.GetGraphics“. Dann füllen wir Farbe für Hintergrund zeichnen eines ausgefüllten Rechtecks für dieses Element verwendet wird.

Wir rufen die Routinen des gezeichneten Bildes, dass ich in der Funktion implementiert haben “paintOffScreen” Diese Grafik übergeben als ein Parameter-Objekt, so können Sie es als Leinwand.

Die letzte Funktion wird die Leinwand auf dem Bildschirm zeichnen oder generiert.

	öffentliche synchronisierte void malen(Graphics g) {
	   d = GetSize();
	   checkOffScreenImage();
	   Grafiken OffG = mImage.getGraphics();
	   offG.setColor(getBackground());
	   offG.fillRect(0, 0, d.Width, d.Height);
	   paintOffScreen(mImage.getGraphics());
	   g.drawImage(mImage, 0, 0, null);
	}

Aufgabe “checkOffScreenImage()” Er wird überwachen, wenn Sie verändert die Größe des Fensters zur Anzeige von grafischen Informationen und erzeugen ein Objekt auf dem gezeichnet werden soll, mithilfe der Funktion “createImage()

	private void checkOffScreenImage() {
	   Abmessungen d = GetSize();

	   wenn (d.Width == 0 || d.Height == 0) {
		Rückkehr;
	   }
	   wenn (mImage == Null || mImage.getWidth(null) != d.width
	      || mImage.getHeight(null) != d.height) {
		mImage = CreateImage(d.Width, d.Height);
	   }
	}

Aufgabe “paintOffScree” ist die alte Funktion oder Methode “malen” Es zeichnet unsere grafische Objekte, Also verdient es nicht weitere Kommentare. Wir haben einfach seinen Namen geändert..

	public void paintOffScreen(Graphics g){
	   Aufzählung enum = bd.elements();
	   Objekt OB;
	   während(enum.hasMoreElements()){
		ob = enum.nextElement();
		wenn(ob instanceof SimpleDrawable){
			((SimpleDrawable) ob).malen(g);
		}
	   }
	}

Wenn Sie die Anwendung ausführen, wir von Flimmern sehen wird ist das Bild verschwunden..

JAVA

Course JAVA