FullScreen Modus - Spielschleife überzeichnet zweite JFrame

Status
Nicht offen für weitere Antworten.

Squid

Mitglied
Hallo Community,
ich hoffe ihr könnte mir bei meinem Problem helfen!

Ich entwickle gerade ein kleines Spiel. Dieses Spiel läuft im FSEM Modus (Full Screen Exclusive Modus) und hat eine Spielschleife in der es den Hintergrund, die Flächen und einen Pin zeichnet. Das ganze läuft natürlich mithilfe eines Threads, das alle Elemente immer wieder neu zeichnet.
Jetzt würde ich gerne ein neues JFrame anzeigen lassen, was leider nicht geht da es von dem Thread immer wieder überzeichnet wird. Ich möchte denn Thread nicht über sleep stoppen, von daher sitze ich gerade etwas auf dem trockenen.

Hat jemand eine Idee zu dem Problem?
 

LoN_Nemesis

Bekanntes Mitglied
Hm im Fullscreen Modus hat man üblicherweise nur einen JFrame. Kannst du nicht einfach das was du auf den neuen JFrame zeichnen willst auf den alten zeichnen? Ansonsten musst du halt wirklich den anderen Thread anhalten. Zum Beispiel könntest du sowas machen:

Code:
public void run() {
   if (!stopped) {
      doSomething(); // Angenommen hier werden all die Sachen gezeichnet
   }
}

Wenn du dann deinen neuen JFrame zeichnen willst, setzt du stopped einfach auf true, und wenn wieder das normale Spiel gerendert werden soll, dann wieder auf false.
 
G

Guest

Gast
Was bietet sich denn als alternative zu einem JFrame an? Ich wollte nämlich auf dem Fenster eine beliebige Frage mit Auswahlmöglichkeiten und einem Button projezieren. Über die Events wollte ich dann eine Punkteverteilung steuern.

Ok, ich könnte das alles auch über das Graphics-Objekt zeichnen und die Events auf Tastatureingaben "umlenken" aber es muss ja auch per JFrame gehen, oder nicht?

@Lon_Nemesis:
Danke für deine Antwort. Ich werde mich heute Nachmittag damit beschäftigen.
 

Squid

Mitglied
So,
ich habe deinen Vorschlag bei mir implementiert.

So sieht der Code dazu aus:

Code:
public void run() {
while (this.running) {
				
				if (!isNewWindowOpen) {
					this.screenUpdate();
				        this.gameUpdate();
				
				
			         } else {
				       
				  
				        neuesFenster.setVisible(true);
				
				
			}
}

Das ganze funktioniert aber nicht so richtig. Also das Fenster wird erzeugt, Allerdings kann ich den Button darauf nicht anklicken. Somit kann ich kein Event abfeuern, was sehr hinderlich ist.
Das hängt wohl irgendwie mit dem Thread zusammen.

Wenn ich eine Hilfsvariable setze sieht der Code so aus:

Code:
private  volatile boolean ersterfensteraufruf=true;

public void run() {
while (this.running) {
				
				if (!isNewWindowOpen) {
					this.screenUpdate();
				        this.gameUpdate();
				
				
			         } else {
				       
				  
				       if(ersterfensteraufruf)
			               {
				            ff.setVisible(true);
				
				           fensteraufruf=false;
			               }
				
				
			}
}

Hier führe ich den Aufruf von setVisible() nur einmal aus. Das hat allerdings nichts gebracht.

Somit kann ich das Fenster nur anzeigen und nicht Events über Buttons absetzen, was ich aber dringend muss. Hat da jemand einen Lösungsweg?
 

Squid

Mitglied
So, ich habe das Problem gelöst!

Ich habe einfach ein JWindow Objekt erzeugt und dem Konstruktor mein Frame als Owner gegeben. Über setVisible() konnte ich dann, wie vorher als Codebeispiel beschrieben, das Fenster aufrufen.

Jetzt habe ich drei Tage wegen dieser blöden Sache verloren. So ein Mist :D
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben