[Java2D] Performance Frage

Status
Nicht offen für weitere Antworten.

Shiroi

Mitglied
Hiho, ich hätte da mal ne Performance Frage.
Ich hab da eine kleine 2D Engine geproggt, ich glaub man kann sie schon soweit eine Engine nenne *g*, die auch einigermaßen gut läuft. Nun habe ich mal mit ein paar Effekten wie Transparenz (opaque) rumgespielt und bin auch seehhrr schnell in einen kritischen Bereich gekommen, bei der die Engine das stottern begonnen hat bzw. Java es nicht mehr verkraftet hat.
Meine Idee war, die Silhouette/Schatten von einer über dem Boden schwebenden/bewegenden Wolke darzustellen.

Folgender Code wird zum "rendern" benützt. (aber etwas gekürtzt *g*)

Code:
public class Engine2D extends JComponent implements Runnable {

  public Engine2D(){
    //<..>
    ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.4f);
    //<..>
  }

  public void start() {
    if (thread != null) {
      return;
    }
    thread = new Thread(this);
    thread.setPriority(Thread.MIN_PRIORITY);
    thread.setName("Engine Thread");
    thread.start();
  }


  public synchronized void stop() {
    if (thread != null) {
      thread.interrupt();
    }
    thread = null;
    notifyAll();
  }


  public void run() {
    Thread me = Thread.currentThread();
    while (thread == me) {
      try {
        thread.sleep(25);
      } catch (InterruptedException e) {}
      repaint();
    }  
    thread = null;
  }

//<..>

public void paint(Graphics g) {
    if (buffer == null) {
      buffer = new BufferedImage(renderres_x, renderres_y,
                                 BufferedImage.TYPE_INT_RGB);
      offscreen = buffer.createGraphics();
    }

    offscreen.setColor(Color.black);
    offscreen.fillRect(0, 0, renderres_x, renderres_y);

    generateObjects();
    generateEnvoirnment();
    //<..> paar Strings werden auf das Bild gemalt
    Graphics2D g2 = (Graphics2D) g;
    g2.drawImage(buffer, 0, 0, renderres_x, renderres_y, this);
  }

  private void generateObjects() {
  
    //<..> Kurzer Algorithmus zur Berechnung des sichtbaren Bereiches, so dass nur dieser gerendert wird.

    aktfx = fpx1; // Feldposition. Die Felder sind in einem xy Array gespeichert
    aktfy = fpy1;
    aktpx = px1; // Koordinate des Feldes in Pixel
    aktpy = py1;

    while (aktpy <= ry2) {
      while (aktpx <= rx2) {
        if (aktfx >= 0 && aktfy >= 0 && aktfx <= max && aktfy <= max) {
          if ((obj[aktfx][aktfy]) != null) {
            objekt = obj[aktfx][aktfy]; // Objekte (Häuser, Bäume, etc.)
            offscreen.drawImage(objekt, (aktpx - 30) - rex,
                                (aktpy - 30) - rey, 60, 30, this);
          } else {
            objekt = ground[aktfx][aktfy]; // Untergrund (Wiese)
            offscreen.drawImage(objekt, (aktpx - 30) - rex,
                                (aktpy - 30) - rey, 60, 30, this);
          }
        }
       //<..> Neue Position wird berechnet für das nächste Objekt in X Richtung
      }
      //<..> Neue Position wird berechnet für das nächste Objekt in Y Richtung
    }
  }

 private void generateEnvoirnment() {
    if (env == 1) {
      offscreen.setComposite(ac);
      for (int i = 0; i <= renderres_y/60 + 1; i++) {
        for (int j = 0; j <= renderres_x/60 + 1; j++) {
          offscreen.drawImage(sky, j * 60, i * 60, this);
        }
      }
      offscreen.setComposite(AlphaComposite.SrcOver);
    }
  }

//<..>

}

Mein Problem liegt in der Methode generateEnvoirnment(), welche eigentlich nur dieses Provisorische gif
sky.gif
aneinander Reiht und es einbissel durchsichtig macht, was normal ja nicht das große Problem sein sollte zum rendern.... aber es geht gewaltig auf die Performance!

Wer es testen will --> Hier ist ne kleine Demo von der Engine. Ach so, achtet nicht auf die FPS *ggggg*

Um die Wolken zu aktivieren, müsst ihr einfach "c" drücken und um zu scrollen müsst ihr die Pfeiltasten benützen. Beenden mit "ESC".

Im Prinzip klatsch ich nur noch mal ein Layer drauf, der eben transparente Stellen hat und Durchsichtig ist. Wer hätte einen Lösungsvorschlag wie man das auch anders realisieren könnte? Hab es auch schon mit einer Textur versucht, die ich auf ein Rechteck der Größe des zu rendernden Bereiches klatsche, was aber noch schlechter ging *g* Und wie könnte ich noch das rendern von dem generateObjects einbissel tunen? Denn beim Scrollen wirkt es einwenig verzerrt, was mir nicht so ganz gefällt.
Wie jeder sehen kann, der schon mal Caesar III gezockt hat, habe ich mir diese Engine zum Vorbild genommen ^^ Darum auch noch vorübergehend die Caesar II Grafiken und dort habe ich absolut nie so eine Verzerrung feststellen können... da frage ich mich, wie die das angestellt haben :s
Zur Info, der im generateObjects() ausgelassene Quellcode ist so minimal, dass er so gut wie keinen Effekt auf die Performance hat, da dort nur einfache Modulo Befehle ausgeführt werden.

Ich hoffe mir kann jemand mit meinen zwei Fragen weiterhelfen :)

mfg DaAngel

Edit: LOL .. hatte da ein Fehler in dem generateEnvironment() ... welcher vielleicht der Übeltäter war... muss es kurz testen und dann lade ich die neue Demo hoch...
Edit2: Ok es lag daran... sorry... aber tortzdem hätte ich gern noch paar Tipps, wie man das alles noch einbischen beschleunigen könnte und wie evtl. das verzerren beim scrollen weg geht und wie man den Effekt von "runden" Kanten bei einem Image hinbekomme, denn die Wolken sind immer einbissel eckig (bei den Test Wolken sowieso *g*), da es ja bei einem gif nicht teilweise durchsichtige Stellen gibt, sondern nur komplett durchsichtig oder ganricht :/ oder?
 
G

Guest

Gast
wo grade von performance gesprochen wird...

korrigier mich, vl. weißt du es besser, aber hilft es wenn du den thread selber schreibst?
extend Thread mein ich?

so hab ichs nämlich gemacht
 

Grizzly

Top Contributor
Hab' mir die Demo runtergeladen.
1. Frage: Warum hast Du das in eine EXE Datei umgewandelt? ???:L
2. Frage: Warum kommt bei mir nur ein grauer Bildschirm? Auch "c", Esc und die Pfeiltasten bringen keine Verändernung. :(
 
R

Roar

Gast
bei mir gehts auch nicht...

und du hast die bildchen nicht zufällig von caesar 3 geklaut??
 

Shiroi

Mitglied
Also, das mit dem grauen Hintergrund ist mir auch ein Rätsel. Aber dieser Fehler kommt nur in der Exe, im "richtigen" Spiel geht es und nicht bei jedem ist der Bildschrim nur grau. Auf dem PC von meinem Bruder und bei meinem Kumpel von mir geht es ohne Probs. Es wurde jetzt schon einiges wieder gemacht, evtl. bring ich dem nächst nochmal ne Demo raus. Ja, die Bilder sind von Ceasar III, hab ich auch in meinem ersten Post geschrieben.. glaub ich *g* Die benütze ich nur vorrübergehend, um mal zu schaun wie es mit ner gescheiten Grafik aussieht, aber wir werden noch eigene Bilder machen, das ist ja selbstverständlich ^^ Ach so, wegen der Exe, ja ich werde es das nächste Mal als Jar machen.

@ Gast: Na ja, bei extends hab ich ja schon das JComponent drinnen, von daher muss ich den Thread mit Runnable machen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
lumo Java2D oder doch OpenglES Spiele- und Multimedia-Programmierung 4
windl CoverFlow in Java2D erstellt Spiele- und Multimedia-Programmierung 24
Kr0e Java2D - Was ist die bewährte Rendermethode ? Spiele- und Multimedia-Programmierung 2
E Wie rendert Java2D/AWT BufferedImages Spiele- und Multimedia-Programmierung 9
M Realisierung einer Sichtweise in Java2D Spiele- und Multimedia-Programmierung 3
S Java2D: AffineTransformation - KOS Spiegeln Spiele- und Multimedia-Programmierung 5
T Transformationen in Java2D Spiele- und Multimedia-Programmierung 6
B Texte in Java2d Spiele- und Multimedia-Programmierung 4
K Hardwarebeschleunigung für Java2D Spiele- und Multimedia-Programmierung 9
R Java2D-Komponenten Spiele- und Multimedia-Programmierung 6
A Java2D Spiel "JSlotter" Spiele- und Multimedia-Programmierung 3
B Java2D: Gradientpaint Spiele- und Multimedia-Programmierung 2
H mit Java2D Markierung über JTable zeichnen und diese bewegen Spiele- und Multimedia-Programmierung 2
M Java2D: GradientPaint mit mehreren Farben Spiele- und Multimedia-Programmierung 4
T Java2D Spiel, beim Hinzufügen eines Bildes ruckelt das ganze Spiele- und Multimedia-Programmierung 3
G SNES Mode7 mit Java2D? Spiele- und Multimedia-Programmierung 2
C Java2D Darstellungsfehler Spiele- und Multimedia-Programmierung 2
C OpenGl Support für Applet (sun.java2d.opengl=True) Spiele- und Multimedia-Programmierung 3
V Java2D dynamische Kurven Spiele- und Multimedia-Programmierung 3
G Punkte des Kreises ausgeben (Java2D) Spiele- und Multimedia-Programmierung 4
K Java2d Bild als JPG oder so speichern Spiele- und Multimedia-Programmierung 10
K VideoPlayer: Xuggler seekkeyframe extrem schlechte Performance.. Spiele- und Multimedia-Programmierung 3
pcfreak9000 "Allgemeine" Performance verbessern (LWJGL 2) Spiele- und Multimedia-Programmierung 2
turing OpenGL / Jogle Code Reveiw zur Performance Verbesserung Spiele- und Multimedia-Programmierung 1
F Massive FPS-Schwankungen, schlechte Performance Spiele- und Multimedia-Programmierung 3
J Java Game performance Probleme Spiele- und Multimedia-Programmierung 7
R LWJGL: Performance glBegin, drawList, ... Spiele- und Multimedia-Programmierung 16
K Android: OpenGL render performance Tipps ? Spiele- und Multimedia-Programmierung 4
B Performance Spiele- und Multimedia-Programmierung 19
Grejak Performance Spiele- und Multimedia-Programmierung 5
M Performance Problem bei BufferedImage Spiele- und Multimedia-Programmierung 7
M Performance von BufferedImages Spiele- und Multimedia-Programmierung 15
M Pixel eines BufferedImage bearbeiten (Performance) Spiele- und Multimedia-Programmierung 23
A jogl 2d performance Spiele- und Multimedia-Programmierung 20
P int-Array zu BufferedImage (performance?) Spiele- und Multimedia-Programmierung 14
S Graphics2D Oval vs. Rect -Performance Spiele- und Multimedia-Programmierung 17
Taschenschieber Schachbrett mit SVG/Batik: Performance? Spiele- und Multimedia-Programmierung 3
Tapsi Anfänger braucht einen Rat ^^ --> Performance Spiele- und Multimedia-Programmierung 7
T performance Spiele- und Multimedia-Programmierung 10
egrath Vista OpenGL Performance Problem? Spiele- und Multimedia-Programmierung 3
I RPG-Spiel und Performance Spiele- und Multimedia-Programmierung 33
N Performance Problem bei mit Graphics Spiele- und Multimedia-Programmierung 6
M Spiel Performance erhöhen Spiele- und Multimedia-Programmierung 24
M Performance Spiele- und Multimedia-Programmierung 5
H Performance check Pong Spiele- und Multimedia-Programmierung 19
M Space PingPong Game --> Performance ok? Spiele- und Multimedia-Programmierung 44
J Performance Spiele- und Multimedia-Programmierung 6
P Java3D Performance und Abstürze Spiele- und Multimedia-Programmierung 3
K Performance von J3D Spiele- und Multimedia-Programmierung 5
N Minecraft Frage für einen Minecraft Server Spiele- und Multimedia-Programmierung 2
G [Java/KryoNet/LibGDX] Mutliplayer Packet Frage Spiele- und Multimedia-Programmierung 2
G [Java Server] Allgemeine Frage zum Thema Networking in Videospielen Spiele- und Multimedia-Programmierung 15
J Frage zum Einlesen einer .wav in ein byte Array Spiele- und Multimedia-Programmierung 3
S ImageSlider frage Spiele- und Multimedia-Programmierung 3
Anfänger2011 Minimap: Theoretische Frage zur Umsetzung Spiele- und Multimedia-Programmierung 2
Androbin Kollisions-Frage Spiele- und Multimedia-Programmierung 8
windl Frage zu Airplay und zur Mitarbeit bei einer Mediaanlage Spiele- und Multimedia-Programmierung 0
S LWJGL Kamera Frage Spiele- und Multimedia-Programmierung 2
P Frage zu einem Projekt "Einarmiger Bandit" 3 Walzen / 9 Zeichnungen BLUEJ Spiele- und Multimedia-Programmierung 10
Guybrush Threepwood Ketzerische Frage: Opus-Codec für Java Spiele- und Multimedia-Programmierung 14
CookieSoft OpenGl Translatef Frage Spiele- und Multimedia-Programmierung 2
Kenan89 Theoretische Frage zu Tile Spielkarten Spiele- und Multimedia-Programmierung 9
R Tileloader Frage Spiele- und Multimedia-Programmierung 2
S Frage: NullPointer, aber warum? Spiele- und Multimedia-Programmierung 8
J Anfänger Frage wie adden? Spiele- und Multimedia-Programmierung 9
R Frage zur Kollision Spiele- und Multimedia-Programmierung 5
M.F.G. Spielvorstellung (plus KI frage): Connect Four – Extreme Spiele- und Multimedia-Programmierung 11
Helgon OpenGL Blend Frage Spiele- und Multimedia-Programmierung 18
P Frage bzgl. TextAdventure Spiele- und Multimedia-Programmierung 11
K Frage zur 3D Entwicklung zwecks vorhandener Engines Spiele- und Multimedia-Programmierung 17
V Frage zu AffineTransforms Spiele- und Multimedia-Programmierung 2
N frage zu der mp3spi Spiele- und Multimedia-Programmierung 2
J Frage zu Threads Spiele- und Multimedia-Programmierung 5
C Frage zu Ray-Picking mit JOGL Spiele- und Multimedia-Programmierung 13
M VRML Loader(noob Frage) ^^ Spiele- und Multimedia-Programmierung 3
M Prinzipielle Frage: Kann Java Grafiken ausschneiden? Spiele- und Multimedia-Programmierung 3
R Frage zu Hütchenspielprogrammierung! Spiele- und Multimedia-Programmierung 47
V Frage zu Grafiken und Software! Spiele- und Multimedia-Programmierung 5
radiac Mal eine ganz Doofe Frage... verzeiht :) Spiele- und Multimedia-Programmierung 9
Developer_X Eine Frage zur ViewBesetzung Spiele- und Multimedia-Programmierung 28
H BlueJ Frage Spiele- und Multimedia-Programmierung 13
K Malefiz programmieren - Frage zu den einzelnen Spielfeldern Spiele- und Multimedia-Programmierung 5
G Ping Pong Frage Spiele- und Multimedia-Programmierung 17
0x7F800000 allgemeine frage zu Java 3D Spiele- und Multimedia-Programmierung 12
B Frage zur Spielsteuerung bei einem rundenbasiertes Spiel Spiele- und Multimedia-Programmierung 5
G frage zu tutorial Spiele- und Multimedia-Programmierung 3
M Frage eines Anfängers Spiele- und Multimedia-Programmierung 3
N Schiffe Versenken Frage zum Spielbrett Spiele- und Multimedia-Programmierung 24
N Generelle Frage: "GUI"-Werkzeuge Spiele- und Multimedia-Programmierung 5
X Frage zu Import von CAD Zeichnungen Spiele- und Multimedia-Programmierung 4
A kurze Frage zu Java3D! (automatische Skalierung) Spiele- und Multimedia-Programmierung 3
S Poker - grundlegende frage zu paint() Spiele- und Multimedia-Programmierung 10
B Frage zum GUI-Design bei Brettspielen Spiele- und Multimedia-Programmierung 4
P Frage zum Scrolling Spiele- und Multimedia-Programmierung 23
B Frage zum Abspielen von Sounddateien Spiele- und Multimedia-Programmierung 2
J Frage zu Geometry und Shape3D Spiele- und Multimedia-Programmierung 4
J Frage zu Transform3D.mul() Spiele- und Multimedia-Programmierung 2
J Java3D: Texture-Frage Spiele- und Multimedia-Programmierung 4
C frage zu glrotated Spiele- und Multimedia-Programmierung 12
T Einsatzbereich-Frage von Java 3D Spiele- und Multimedia-Programmierung 24

Ähnliche Java Themen

Neue Themen


Oben