Graphics übereinander darstellen

Gentrix1990

Mitglied
Moin, ich habe folgendes Problem:

Ich Programmiere zur Zeit eine Simulation.
Hier werden BufferedImages zu einzelnen Frames erstellt und dann als eine Art Video abgespielt.
Da die Berechnungen relativ zeit- und speicherintensiv sind möchte ich dieses Verfahren nun ändern.
Da ich einen Raum habe, in denen sich Personen bzw. Pixel bewegen, würde es Sinn machen, wenn man den Raum einmal
darstellt und in einer darüber liegenden Schicht dann die Pixel zu jedem Frame.
Kann mit Jemand eine Idee geben wie sich dies am besten umsetzten ließe?
Der Hintergrund soll dabei nur einmal gezeichnet werden und die Schicht mit den einzelnen Pixeln dann jeweils in jedem Frame neu.
Es ist ja kein Problem die Schichten als getrennte BufferedImages zu erzeugen und dann übereinander zu zeichnen, jedoch zeichne ich dann ja auch den Hintergrund jedesmal neu.

Jemand eine Idee?

Danke schonmal!

Gruß
Gentrix
 
Hi

das geht nicht.
Wenn man den Hintergrund einmal mit Pixeln übermalt sind die Stellen übermalt.
Wenn man die alten Pixel wieder weghaben will, um die neuen zu zeichnen
muss man den Hintergrund drübermalen, anders bekommt man sie nicht weg.
Bzw. man kann sie schön mit irgendwas Anderem übermalen (Schwarz...),
nur schauen so schwarze Punkte im Hintergrund sicher seltsam aus.
 
Hallo,
danke erstmal für die Antwort.
Wenn ich das richtig verstanden habe, dann bringt mir das Doublebuffering nur, dass ich kein Flackern beim wechseln der Bilder bekomme, da ich das nächste Bild zeichnen kann, ohne das es angezeigt wird. Dann müsste ich ja bei einem 1000x1000 Bild nach wie vor für jeden Frame 1,000,000 Pixel zeichnen, obwohl sich evt nur 20,000 Pixel verändert haben.

Ich habe noch gefunden, dass man JLabels mit einem JLayeredPane übereinander legen kann. Vielleicht funktioniert es dann auch so, wenn ich das vordere durchsichtig gestalte.
Ich werde dann das erstmal ausprobieren.

Danke und Gruß
Gentrix
 
Was du machen kannst:

*ignoreRepaint
--automatisches Neuzeichnen verhindern
*nur entsprechenden Bildbereich neuzeichnen lassen
--repaint und update kann man Koordinaten mitgeben, damit nicht alles neugezeichnet wird
*alte Koordinaten übermalen
--Du hast der Einfachheit halber einen Pixel an der Stelle P(x, y) der sich nun nach Q(x', y') "bewegt".
Du setzt in deiner Zeichnung also nun einen neuen Pixel an die Position x', y' und holst dir vom Hintergrund den Pixel an der Stelle x, y den du auf deiner Zeichnung auf dorthin malst.
 

Neue Beiträge

Zurück