Java 2D game custom Draw methode?
hallo also meine frage ist was sind die nach/vorteile wenn ich in meinem 2D java game eine "custom" draw method habe...anstatt einfach die paintComptonent zu overriden...denn ich hab eben eine methode drawToTempScreen(die die ganzen draw methoden der anderen classen abruft) und eine drawToScreen method die dann den inhalt wirklich ins window zeichnet(das ganze war im tutorial wegen der screen dimension...) nur hab ich irgendwie immer probleme wenn ich jetzt irgendwas anderes hinzufügen möchte wie JLabel, JButton, JScrollPanel...da diese meist garnicht angezeigt werden bzw wenn dann immer nur für ne millisekunde und ich denke die werden dann eifach überzeichnet von der drawToTempScreen/ oder drawToScreen methode...würde aber gerne wissen was jetz am besten wär das ich eben schon einfach gern sachen hinzufügen möchte...probiere seit einiger zeit ne kleine command console ins spiel hinzuzufügen doch das haut einfach nicht hin...selbst wenn ich sie endlich hab wird sie flackernt/falsch oder garnicht angezeigt...
nur zur info... ich hab eben ein main JPanel names GamePanel in dem die gameloop, update, draw methods sind...wenn noch infos benörtigt werden einfach schreiben,
1 Antwort
Der Hauptunterschied zwischen der Verwendung einer eigenen Zeichenmethode und dem Überschreiben von `paintComponent` besteht darin, dass du durch die Erstellung deiner eigenen Methode eine größere Kontrolle über den Zeichenprozess hast. Du kannst genau bestimmen, wann und wo gezeichnet wird, und du kannst zusätzliche Zeichenfunktionen hinzufügen, die in der Standardmethode `paintComponent` nicht vorhanden sind. Darüber hinaus wird `paintComponent` automatisch vom Swing Event Dispatch Thread aufgerufen, was bedeutet, dass du keine Kontrolle darüber hast, wann und wie oft diese Methode aufgerufen wird.
Es gibt jedoch auch einige Nachteile, insbesondere wenn du Swing-Komponenten wie `JLabel`, `JButton`, `JScrollPanel` usw. verwenden möchtest. Diese Komponenten verlassen sich auf die `paintComponent` Methode, um korrekt gezeichnet zu werden, und wenn du deine eigene Zeichenmethode verwendest und `paintComponent` nicht korrekt aufrufst, können diese Komponenten falsch oder gar nicht gezeichnet werden.
In deinem Fall, wenn du Schwierigkeiten hast, Swing-Komponenten korrekt zu zeichnen, könnte es helfen, deine eigene Zeichenmethode zu entfernen und stattdessen `paintComponent` zu überschreiben. Andernfalls könntest du versuchen, deine eigene Zeichenmethode so zu modifizieren, dass sie `paintComponent` aufruft, bevor sie irgendetwas anderes zeichnet. Dies könnte etwa so aussehen:
```java
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g); // ruft die ursprüngliche paintComponent-Methode auf
// Dein Zeichencode hier
}
```
Dies stellt sicher, dass die Standard-Swing-Zeichenoperationen (einschließlich das Zeichnen von Komponenten wie `JLabel`, `JButton`, etc.) immer durchgeführt werden, bevor deine eigenen Zeichenoperationen ausgeführt werden.
Vergiss nicht, dass Swing nicht unbedingt für Spiele oder Anwendungen mit hoher Grafikleistung ausgelegt ist. Wenn du ernsthaft in die Spieleentwicklung einsteigen möchtest, solltest du vielleicht eine speziell dafür ausgelegte Bibliothek wie LWJGL oder eine Spiele-Engine wie Unity oder Unreal in Betracht ziehen.