Anfänger braucht einen Rat ^^ --> Performance

Status
Nicht offen für weitere Antworten.

Tapsi

Mitglied
Hallo , ich programmiere ein Spiel und wollte mal die Profis fragen ob man das untere noch performanter machen kann :D

Code:
public void starte_takt(){
        
        takt = 0;
        ...
        
        // Diese Schleife läuft solange das Spiel nicht beendet wurde
        while (true){
            
            System.out.println(takt);   // Tester um die geschwindigkeit zu sehen
            // SPIELMETHODEN
            
                // Runde für Spieler starten
                ...
            // <-- ENDE SPIELMETHODEN
            
            // GRAFIKMETHODEN
            
                Farbbild grafik_komplett = new Farbbild(16*spielfeldgroeße_x,16*spielfeldgroeße_y); 
                Graphics gp = grafik_komplett.createGraphics();
                
                for( int x = 0 ; x < spielfeldgroeße_x ; x++ ){
                    for( int y = 0 ; y < spielfeldgroeße_y ; y++ ){
                        gp.drawImage(sprites[1][0],(x*16) ,(y*16)-16 , null );   // Sprite[1][0] beinhaltet ein 16x32 Sprite (von einer .png) mit AlphaChannel
                    }
                }
                
                fenster.setze_grafik(grafik_komplett); 
            
            // <-- ENDE GRAFIKMETHODEN
            
            try{Thread.sleep (1);}         
            catch (InterruptedException ex){}   // Geprüfte Exception
            
            Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
            takt = takt%7 + 1;                 // Der aktuelle Takt ( akt. 32er Takt )
            
        } 
    }

Ohne Alpha ( laden einer PNG ) zeichnet er extrem schnell , aber Alpha ist extrem wichtig , da die Felder 16x16 sind und die Sprites 16x32. Einige Sprites wie Berge enthalten Informationen die über das obere Feld gezeichnet werden müssen...
 

Ark

Top Contributor
Versuche, irgendwie dieses new aus der Schleife rauszukriegen, gleiches gilt für das createGraphics(). Auch dieses Modulo solltest du irgendwie rausnehmen (Divisionen sind teuer). Wozu soll takt überhaupt gut sein? Das mit der Threadpriorität ist auch invariant, kann also außerhalb der Schleife stehen. Mit Thread.sleep(1) kommst du theoretisch auf 1000 fps - kein Mensch braucht so etwas. Fernsehbilder haben z.B. nur 25 fps. Ganzzahl "mal 16" kannst du auch durch "vier Bits nach links schieben" abbilden. Das kann was ausmachen. Und wo um alles in der Welt bist du überhaupt? Wo ist die paint()- bzw. paintComponent()-Methode?

Ark
 

Quaxli

Top Contributor
Ein bißchen mehr als 25 fps sollten es schon sein - abhängig vom Spiekonzept.
Ein Ansatz könnte z. B. sein, sich an der Monitorfrequenz zu orientieren.
Da es ratsam ist, Bewegungen in Abhängigkeit von der Zeit, die der GameLoop benötigt, zu berechnen, damit das Spiel auf allen Rechnern flüssig läuft, ist eine hohe FPS-Zahl hier sehr vorteilhaft.
Aus meiner Erfahrung wäre ein Wert größer 60 erstrebenswert.

Google mal nach "Killer Game Programming" bzw. sollte hier im Forum auch irgendwo ein Link sein. Dort gibt es ein großes Kapitel zu dem Thema. Angefangen von einem ganz einfachen Loop mit "fixem Thread.sleep(...)" bis zu einem sehr ausgereiften Ansatz mit Anpassung and die Monitorfrequenz, Aussetzen der Grafikanzeige, aktivem Rendern, etc..
 

Tapsi

Mitglied
Danke für die schnellen Tipps.

Dies ist die Schleife die solange durchläuft bis das Spiel zu ende ist.
Ja gestern kurz vorm Schlafen gehen ist mit auch ne Idee eingefallen , dass Ich das Bild zeichnen so groß wie möglich
aus der Schleife schaffen muss.

Das Problem ist, das alle 2 Taktschritte ein anderes Bild gezeichnet wird ( ich bekomme es nicht hin animationen aus Gif bildern zu lesen , weiß einer was ??? ). Ich teile die gif in 4 einzellne Bilder und lasse alle 2 Takte das Bild wechseln ( Takt 2 -> Einheit_sprite-1 , Takt 5 -> Einheit_sprite-3 usw. ).
 

Quaxli

Top Contributor
Wie Ark schon gesagt hat, können wir von Deinem Code nicht wissen, wie Du Dein Spiel konzipiert hast. Zum Beispiel fehlt auch der Teil wo Du zeichnest (hat Ark auch schon angemerkt).

Aus dem Code oben würde ich jetzt erst mal vermuten, daß Du die Zeichnen-Operationen grundsätzlich falsch konzipiert hast.
 

Tapsi

Mitglied
habe die zeichnen_operationen umgeändert und größtenteils ausgelagert. Läuft nun sauschnell :D

Und fenster.setze_grafik(...); ruft an der Klasse Fenster die das Objekt mit der Grafikfläche enthält die paint Methode auf, die eigentlich nur grafik_komplet sichtbar macht :wink:
Grafik komplett wird also in der schleife berechnet und der letzte befehl übergibt alles zum fenster.
Im moment Lasse ich 4 einzellne komplette feld grafiken berechnen die ich immer im wechsel anzeigen lasse ( damit es einheiten animation gibt ), anstatt das immer wieder neu zu berechnen, wird die grafik nur neu berechnet wenn sich eine Einheit bewegt hat.

Das Spiel wird eine Art Advance Wars Klon

53604827vp5.jpg


17356736nx6.jpg
 

Ark

Top Contributor
Ha! BlueJ! Das erklärt einiges. ^^

Spaß beiseite. Ich habe mich zwar noch nicht sonderlich der Spieleprogrammierung gewidmet, aber für meinen Geschmack sind die im Diagramm dargestellten Abhängigkeiten der Wahnsinn. Und noch immer gilt: So lange du uns nicht die ultimative paint()/paintComponent()-Methode zeigst, werden wir dir nicht groß weiterhelfen können.

Ark
 

Tapsi

Mitglied
Im moment gehts ja super voran :D

Trotzdem danke ich euch das ihr mir helft ^^

Falls jemand weiß wie Color Overlay geht , hab ein Post aufgemacht. Für das wäre ich echt dankbar , hab mich schon durch ewig viele Seiten gebuddelt aber nix gefunden.

PS : Muss ich vom Studium her benutzen xD
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Spiel mit Java SWING, LWJGL und JMonkey [Anfänger braucht Hilfe] Spiele- und Multimedia-Programmierung 10
C anfänger braucht hilfe für info unterricht Spiele- und Multimedia-Programmierung 21
Timo_neu_in_java Suche etwas einfaches für Anfänger Spiele- und Multimedia-Programmierung 6
S 2D mit Slick - Anfänger sucht Hilfe Spiele- und Multimedia-Programmierung 4
J Anfänger Frage wie adden? Spiele- und Multimedia-Programmierung 9
T jMonkeyEngine Anfänger Spiele- und Multimedia-Programmierung 3
D einfache 2D Grafik in JAVA. absoluter Anfänger Spiele- und Multimedia-Programmierung 5
M Anfänger Problem mit einen MouseMotionListener Spiele- und Multimedia-Programmierung 2
M Anfänger Spieletest Spiele- und Multimedia-Programmierung 5
S spielprogrammierung für anfänger Spiele- und Multimedia-Programmierung 14
C |DOMINOSPIEL| Starthilfe für Java-Anfänger Spiele- und Multimedia-Programmierung 2
F Welchen Platz braucht ein Text? Spiele- und Multimedia-Programmierung 4
N Minecraft Frage für einen Minecraft Server Spiele- und Multimedia-Programmierung 2
G Mikrophon-/Audiosteuerung für einen Character Spiele- und Multimedia-Programmierung 1
D Iterieren durch einen Ordner mit Audiodateien und verketten eine andere Audiodatei Spiele- und Multimedia-Programmierung 17
Blender3D VlCJ Windows 10 kein Zugriff auf einen im Netzwerk freigegebnen Ordner Spiele- und Multimedia-Programmierung 2
S Wie kann ich ein Bild in einen Frame einfügen? Spiele- und Multimedia-Programmierung 2
J mehrere Listener für einen Button / Label Spiele- und Multimedia-Programmierung 1
S Einen Dialog zweier Personen erstellen (Textadventure) Spiele- und Multimedia-Programmierung 4
E [LWJGL] Karusell, mehrere Objekte drehen sich um einen Mittelpunkt Spiele- und Multimedia-Programmierung 31
F Einen Sound mit veränderter Tonhöhe und Geschwindigkeit abspielen - Hilfe erbeten Spiele- und Multimedia-Programmierung 29
C Java3D Sound spielt nur einen Sound ab. Spiele- und Multimedia-Programmierung 8
M Einen Hobby Game - / Grafik Designer zu finden (Screenshot vom Spiel) Spiele- und Multimedia-Programmierung 7
F Wie mache ich einen Screenshot vom Display (LWJGL)? Spiele- und Multimedia-Programmierung 7
C Java3D Rotation um einen Punkt (y-achse) Spiele- und Multimedia-Programmierung 2
C JAVA3D Rotation um einen bestimmten Punkt Spiele- und Multimedia-Programmierung 20
G Wie bekomme ich einen Punkt (Graphics) Spiele- und Multimedia-Programmierung 2
T Wie kann ich ein OrbitBehavior auf einen festen Wert setzen? Spiele- und Multimedia-Programmierung 2
K Wie malt man am geschicktesten einen Würfel? Spiele- und Multimedia-Programmierung 2
G Einen gif oder jpg Datei aus einem Graphics Objekt o. JFrame Spiele- und Multimedia-Programmierung 2
I jPCT rendert nur einen schwarzen Bildschirm Spiele- und Multimedia-Programmierung 2
R Wie zeichne ich einen einzelnen Punkt Spiele- und Multimedia-Programmierung 2

Ähnliche Java Themen

Neue Themen


Oben