Guten Abend, ich hatte bei meinem in Java programmierten Spiel immer das Problem, dass mein Lüfter von meinem MacBook immer lauter wurde. Dann habe ich meine CPU genauer beobachtet und festgestellt, dass diese beim Start extrem in die Höhe steigt. Nachdem ich bisschen geschaut habe, habe ich die repaint() Methode in paintComponent auskommentiert und schon hatte ich das Problem nicht mehr. Jetzt ist meine Frage, kann man die repaint() Methode irgendwie verlangsamen oder gibt es eine bessere Möglichkeit die gezeichneten Objekte immer wieder zu aktualisieren? Vielen Dank.
:
Verschoben durch User
Ich habe mein Problem selber gelöst. Für alle die es interessiert: Ich habe super einfach einen Timer erstellt, der jede 100ms aufgerufen wird und repaint() ausführt.
:
Bearbeitet durch User
Ehrlich gesagt würde ich dir empfehlen eine andere Engine für Games zu nehmen als Java! Minecraft ist ein gutes Negativbeispiel. Trotz der Klötchengrafik erreicht man kaum 70 oder 80 FPS mit nem Gamingrechner. JavaFX ist für GUIs gedacht. Nicht für Games. Wenn du Java kannst, wirst du dich binnen Wochen in C# einarbeiten können. Damit kannst du prima in Unity programmieren - einer richtigen Game Engine. Lukas B. schrieb: > Ich habe mein Problem selber gelöst. Für alle die es interessiert: > Ich habe super einfach einen Timer erstellt, der jede 100ms aufgerufen > wird und repaint() ausführt. Toll, damit hast du ein Programm das mit 10FPS läuft...
:
Bearbeitet durch User
Alex G. schrieb: > Toll, damit hast du ein Programm das mit 10FPS läuft... Könnte es locker noch ohne Probleme auf 5ms runter stellen ohne das der Lüfter von meinem MacBook zu höheren ist. Aber für den derzeitigen Stand brauche ich nicht mehr als 10FPS. C# läuft aber auf macOS nicht. Da bräuchte ich wieder eine VM auf der Windows läuft...
Lukas B. schrieb: > C# läuft aber auf macOS nicht. Da irrst Du Dich aber gewaltig. Es gibt von Unity einen MacOS Port, und das basiert auf C# (in Form von Mono).
Oh je. Das kommt dabei raus wenn Apple Hipster sich an Spieleentwicklung machen.
Ich kenne mich mit Java nicht aus, aber fix alle 100ms einen repaint zu triggern halte ich in der heutigen Zeit für grundlegend falsch: - Es wird alle 100ms gezeichnet, auch wenn es nicht notwendig wäre - Was, wenn ein das zeichnen mal mehr als 100ms dauert? Zeichnest du denn immer alles neu, oder könnte man nur gewisse Regionen aktualisieren? Double Buffering möglich? Werden beim Zeichnen aufwendige Operationen ausgeführt, die man auslagern könnte?
Moin, da leider kein Quellcode angegeben ist, kann ich Dir folgende Antwort bieten: https://docs.oracle.com/javase/8/docs/api/java/awt/Component.html#repaint-long- Die Component-Klasse und alle ihrer Ableitungen enthalten auch die repaint-Methode mit dem long-Parameter. Dieser sorgt für die von Dir gewollte Verzögerung. Denk daran: Der EDT wird durch das Warten auf AWT oder Swing-Komponenten blockiert. Daher: EventQueue.invokeLater(new Runnable() { ... }); Übrigens um einige Antworten zu ergänzen: 1. Java eignet sich für die Spiele-Entwicklung (bis zu einem gewissen Grad) 2. Wie Olle Ihmchen schon schreibt: Die LWJGL-Bibliothek wäre hierfür ein hervorragender Kandidat.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.