Hallo,
meine Frage ist von allgemeiner Natur.
Stellt euch vor, ihr habt irgendein kleines 2D-Spiel mit einer Spieloberfläche mit Hintergrund und Vordergrundobjekten. Das Hintergrundobjekt ist in BufferedImage.
Grundsätzlich wird durch DoubleBUffering der ein Bild der gesamten LaufzeitUmgebung (mit samt Hintergrund und Vordergrundobjekten) erzeigt und in die Anzeige geladen.
Während des SPiels soll sich zu ebstimmten Zeiten die Helligkeit des Hintergrunds verändern (verdunkeln und wieder heller werden).
So viel zur Erklärung der Umstände...
Wir haben verschiedene Lösungsansätze des Problems theoretisch durchdacht und sind uns nicht im Klaren was davon "richtig" ist.
- 1 - Da das BackBufferBild, das in den FrontBUffer geladen werden soll grundsätzlich auf das im Hintergrund verdunkelte Bild warten muss(!) stellt man eine deutliche Verlangsamung der fps bzw der Laufzeit fest, während das Bild umgerechnet wird.
Erst haben wir versucht Pixel für Pixel dunkler zu amchen. Dann kamen wir auf die Idee eine schwarze Ebene mit einem ALphaCHannel drüberzulegen - was wohl aber auf das gleiche hinausläuft, weil die JVM die berechnung der Pixel unter der Transparenten Ebene vornehmenmuss.
Eine weitere Möglcihkeit wääre das auslegen in einen Thread... da aber der Backbuffer auf das BIld warten muss... siehe oben...
- 2 - Man lagert sämtliche Bilder der Verdunklungsanimation in eine LinkedList und speichert sozusagen jeden einzelnen Zustand der Verdunklung als eigenes BUfferedIMage, das dann einfach abgerufen werden kann... macht man das überhaupt so???
Wir fragen uns, warum eine simple Bildverdunklung einer relativ kleinen Grafik so unglaublich lange dauert, dass man es förmlich sehen kann, wohingegen moderne 3D-Shooter rebungslos laufen obwohl die Berechnungen, dort in keienr Weise mit diesen hier zu vergleichen sind...
Eine Referenz auf eine entsprechende Erklärung würde uns schon reichen
Mfg
keltis
meine Frage ist von allgemeiner Natur.
Stellt euch vor, ihr habt irgendein kleines 2D-Spiel mit einer Spieloberfläche mit Hintergrund und Vordergrundobjekten. Das Hintergrundobjekt ist in BufferedImage.
Grundsätzlich wird durch DoubleBUffering der ein Bild der gesamten LaufzeitUmgebung (mit samt Hintergrund und Vordergrundobjekten) erzeigt und in die Anzeige geladen.
Während des SPiels soll sich zu ebstimmten Zeiten die Helligkeit des Hintergrunds verändern (verdunkeln und wieder heller werden).
So viel zur Erklärung der Umstände...
Wir haben verschiedene Lösungsansätze des Problems theoretisch durchdacht und sind uns nicht im Klaren was davon "richtig" ist.
- 1 - Da das BackBufferBild, das in den FrontBUffer geladen werden soll grundsätzlich auf das im Hintergrund verdunkelte Bild warten muss(!) stellt man eine deutliche Verlangsamung der fps bzw der Laufzeit fest, während das Bild umgerechnet wird.
Erst haben wir versucht Pixel für Pixel dunkler zu amchen. Dann kamen wir auf die Idee eine schwarze Ebene mit einem ALphaCHannel drüberzulegen - was wohl aber auf das gleiche hinausläuft, weil die JVM die berechnung der Pixel unter der Transparenten Ebene vornehmenmuss.
Eine weitere Möglcihkeit wääre das auslegen in einen Thread... da aber der Backbuffer auf das BIld warten muss... siehe oben...
- 2 - Man lagert sämtliche Bilder der Verdunklungsanimation in eine LinkedList und speichert sozusagen jeden einzelnen Zustand der Verdunklung als eigenes BUfferedIMage, das dann einfach abgerufen werden kann... macht man das überhaupt so???
Wir fragen uns, warum eine simple Bildverdunklung einer relativ kleinen Grafik so unglaublich lange dauert, dass man es förmlich sehen kann, wohingegen moderne 3D-Shooter rebungslos laufen obwohl die Berechnungen, dort in keienr Weise mit diesen hier zu vergleichen sind...
Eine Referenz auf eine entsprechende Erklärung würde uns schon reichen
Mfg
keltis