Game Loop Problem

G

GuestG

Gast
Hi,

ich hatte und hab gerade ein sehr komisches Problem mit meinen GameLoop.
Java:
	while(!terminated)														
{
 if(running)																
   {
	long startTime = System.currentTimeMillis();
	update();	
	long sleeptime = (startTime + 20) - System.currentTimeMillis();	
		
		 if(sleeptime < 0 )
		{
			sleeptime = 0;
		}
		try {gameController.sleep(sleeptime);}				
		catch (InterruptedException e) {System.out.println("Unterbrechungsfehler");}
		}
}

Problem war, dass mein Spiel nicht ausgeführt wurde (die schleife nicht lief). Erst nachdem ich zwischen while(!terminated) und if(running) noch einen Befehl (System.out.println()) eingefügt hatte ging es. Aber woran es lag konnte ich nicht sagen.
Das selbe Problem tritt momentan noch auf wenn ich das if in ein while ändere.
Wird da irgendwie was zu schnell abgetestet? so wirklich verstehe ich das Problem nicht.
while(!terminated) läuft ja ständig und bei jeden Durchlauf testet er ja ab ob running == true ist.

mfg
 
G

GuestG

Gast
Spielt es eine große Rolle wo running gesetzt wird?
Es wird mit dem Pause Button gesetzt vorher die Instanzvariable running auf false.

Java:
pauseButton.addActionListener(new ActionListener() 
		{
			public void actionPerformed(ActionEvent e) 
	         { 
				requestFocus(); 
				if(game.isRunning() == false)
				{
					pauseButton.setIcon(pauseIcon);
					game.setRunning(true); 
				}
				else
				{
					pauseButton.setIcon(spielFortsetzenIcon);
					game.setRunning(false);
				}
	         }
});

Der Button setzt running wirklich auf true aber der GameLoop reagiert dann halt aus irgendeinen Grund nicht drauf obwohl er nach meinen Verständlich permanent testen müsste ob running auf true ist und bei einer Änderung auch reagieren müsste.
 
G

Gast2

Gast
Natürlich spielt das eine Rolle!

Wenn du z.B: Threads verwendest könnte es zu Concurrencies oder Deadlocks kommen etc....
 

Plopo

Bekanntes Mitglied
Problem war, dass mein Spiel nicht ausgeführt wurde (die schleife nicht lief). Erst nachdem ich zwischen while(!terminated) und if(running) noch einen Befehl (System.out.println()) eingefügt hatte ging es.

Hast du den irgend eine Art von Ausgabe, ohne den Syso-Befeh zwischen der While-Schleife und if-Abfrage?
Ansonsten läuft dein Programm schon richtig.
Nur siehst du nichts, da keine Ausgabe gemacht wird.
 
G

GuestG

Gast
Der GameLoop ist genau so wie im Spiel. Zwischen While-Schleife und if-Abfragesteht nix.
Hier muss ich mich mal korrigieren mit while und if geht es. Nur wenn ich das if in ein while ändere geht es nicht mehr.

Also Deadblocks sind quasi Zustände in dem zwei Threads (in meinen Fall der Spiel-Thread und der MainThread) die gleiche Ressourche irgendwie beanspruchen.
Also könnte man eventuell mal probieren das running zu synchronisieren?

mfg
 

Plopo

Bekanntes Mitglied
Warum brauchst du eine While-Schleife in einer While-Schleife?
Das ist unnötig und bringt nichts.

Java:
while(!isTerminated)
{
   if(isRunning)
   {
      //Methoden
   }
}

Ist doch alles was du brauchst, in die If-Abfrage kommt dein Game Zeugs rein.
 

Marco13

Top Contributor
Wenn bei dem "sleep" eine 0 übergeben wird, macht er gar nichts, und es kann sein, dass dieser Thread dann alleine läuft (SEHR vereinfacht). Mach' mal sowas wie
Java:
// WEG
//if(sleeptime < 0 )
//{
//  sleeptime = 0;
//}

// HIN:
sleepTime = Math.max(1, sleepTime);
 
C

CPU-Last

Gast
Das Problem dürfte sein das in der while ein sleep fehlt.
Vereinfacht : wenn isTerminated false ist und gleichzeitig runnig ebenfalls false ist dann hast du eine leere Endloseschleife. Und die frisst extrem viel CPU-Zeit wesshalb es dazu kommen kann das der Loop viel zu ausgelastet ist mit nichts-tun um auf die Flagänderung zu reagieren. Leere loops sollte man grundsätzlich vermeiden und stattdessen gerade bei solchen "Pausen" mit wait und notify arbeiten.

btw : while(!bool) macht man nicht (lange Form : ist es wahr das etwas falsch ist). Wenn man dierekt nur bools hat dann schreibt man immer so das man dierekt auf den bool prüft.
Also statt while(!isTerminated) halt auf while(isNotTerminated).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Verwirrender Game Loop Java Basics - Anfänger-Themen 6
L Wizzard-Game Java Basics - Anfänger-Themen 3
Jxhnny.lpz bouncing Ball (Brick-Breaker-Game) Java Basics - Anfänger-Themen 1
V Probleme Guessing Game Java Basics - Anfänger-Themen 8
X Game of Life Nachbarn zählen Java Basics - Anfänger-Themen 20
P Moore Nachbarschaft-Game of Life Java Basics - Anfänger-Themen 1
P 2D Game Java Basics - Anfänger-Themen 6
L Conways Game of Life Java Basics - Anfänger-Themen 4
J Game of life Java Basics - Anfänger-Themen 3
B "Snake"-Game verbuggt Java Basics - Anfänger-Themen 0
K Game of live Java Basics - Anfänger-Themen 4
F Java Collectors Game Hilfe Java Basics - Anfänger-Themen 4
C Wie kann ich jetzt von der Game.java auf die Timer.java zugreifen? Java Basics - Anfänger-Themen 6
E Belebeste Area im Game of Life suchen Java Basics - Anfänger-Themen 0
B Wer kennt einen Link für vollständiges, leichtverständliches "Game of Life"? Java Basics - Anfänger-Themen 1
F Game-Engine für textbasierendes Spiel: Architektur? Java Basics - Anfänger-Themen 9
D Textfield im Game ,Problem: while-Schleife Java Basics - Anfänger-Themen 1
C Game of life Java Basics - Anfänger-Themen 14
K Gutes Java 3D Game Tutorial gesucht Java Basics - Anfänger-Themen 6
Java-Insel Game-Konzept Java Basics - Anfänger-Themen 10
T Kleines Game mit Kollision Java Basics - Anfänger-Themen 2
V Start ins Java Game Development Java Basics - Anfänger-Themen 22
I Programm Game & AR Java Basics - Anfänger-Themen 13
P Game of Life Java Basics - Anfänger-Themen 18
C Conways Game of Life / "Waldbrandsimulation": wieso temporäres Hilfs-Array?! Java Basics - Anfänger-Themen 8
K Game of Life Implementierung Java Basics - Anfänger-Themen 30
D Game of Life - Nachbarn zählen Java Basics - Anfänger-Themen 8
Developer_X Game of Life Java Basics - Anfänger-Themen 10
L Game of life in einem FensterVisualisieren Java Basics - Anfänger-Themen 2
D Game of Life Java Basics - Anfänger-Themen 14
T Anagram Game - warum ist es auf 2 Packages aufgeteilt? Java Basics - Anfänger-Themen 3
S 3d-game java3d/eigene API Java Basics - Anfänger-Themen 4
C Pong Game Java Basics - Anfänger-Themen 2
Ranger229 Endless loop in while Schleife Java Basics - Anfänger-Themen 3
P Best Practice While loop schleife Java Basics - Anfänger-Themen 5
I Scanner Loop Java Basics - Anfänger-Themen 1
J Erste Schritte Unendlichen Loop stoppen Java Basics - Anfänger-Themen 2
K loop pausieren für eine bestimmte Anzahl? Java Basics - Anfänger-Themen 1
R While-Loop der die Einträge eines Arrays in umgekehrter Reihenfolge anzeigt Java Basics - Anfänger-Themen 3
L loop für Namen Java Basics - Anfänger-Themen 11
D NullPointerException in foreach loop Java Basics - Anfänger-Themen 1
iman Loop Java Basics - Anfänger-Themen 21
CT9288 Permanent laufender loop mit Eingabefunktion gesucht Java Basics - Anfänger-Themen 1
P for-loop Java Basics - Anfänger-Themen 10
W While-Loop unterbrechen Java Basics - Anfänger-Themen 4
I TextField Array mit for Loop erzeugen Java Basics - Anfänger-Themen 4
D Was ist Loop: ? Java Basics - Anfänger-Themen 13
Zeekay Development Erste Schritte Spitzen via For-Loop Java Basics - Anfänger-Themen 4
E Wenn i (for-Loop) bestimmter Wert, dann neue Zeile eines Buttons Java Basics - Anfänger-Themen 7
K Loop ohne Schleifen Java Basics - Anfänger-Themen 2
M bufferedreader loop stoppen Java Basics - Anfänger-Themen 2
R window-Klasse, main-loop und unausschaltbares anti-aliasing Java Basics - Anfänger-Themen 0
S clip.loop(Clip.LOOP_CONTINUOUSLY); stoppen klappt nicht! Java Basics - Anfänger-Themen 11
S Warum erlaubt ein while-Loop keine Variablen-Declaration wie der for-Loop..? Java Basics - Anfänger-Themen 6
S Printstream für einen Hashmap Loop Java Basics - Anfänger-Themen 1
E Integer oder Strings spiegeln (in while loop) Java Basics - Anfänger-Themen 6
P Interpreter-Fehler Im for loop funkzioniert repaint nicht :( Java Basics - Anfänger-Themen 4
D Loop Funktion für Robot Klasse Java Basics - Anfänger-Themen 5
Devil0s while loop, Button action Java Basics - Anfänger-Themen 8
V Schon wieder ein kleines problem...dieses mal mit do-while loop Java Basics - Anfänger-Themen 9
L Mit ChangeListener JSpinner Loop erstellen Java Basics - Anfänger-Themen 2
N Problem mit Loop Java Basics - Anfänger-Themen 2
A For each loop Java Basics - Anfänger-Themen 3
A Vectors in for-loop Java Basics - Anfänger-Themen 6
S For-Each Loop Java Basics - Anfänger-Themen 16
G Loop blockt alle Events Java Basics - Anfänger-Themen 7
G Loop funktion Java Basics - Anfänger-Themen 6
R Best Practice Problem mit (einfacher) Doppelt-Schleife Java Basics - Anfänger-Themen 53
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
I WildFily - unterschiedliche Libs im Projekt verursachen Problem Java Basics - Anfänger-Themen 11
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
A ScheduledExecutorService problem Java Basics - Anfänger-Themen 7
marcelnedza Problem mit Weltzuweisung, JavaKarol Java Basics - Anfänger-Themen 13
XWing Methoden rückgabe Problem? Java Basics - Anfänger-Themen 6
M Erste Schritte Collatz Problem max int Java Basics - Anfänger-Themen 3
M Problem bei verschachtelter for-Schleife bei zweidimensionalen Arrays Java Basics - Anfänger-Themen 3
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
nelsonmandela Problem bei Ausgabe einer Switch - Case Funktion Java Basics - Anfänger-Themen 5
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
L Problem bei Rechnung mit Math.pow Java Basics - Anfänger-Themen 13
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
SUPERTJB return Problem Java Basics - Anfänger-Themen 3
sserio BigInteger Problem Java Basics - Anfänger-Themen 4
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
K Problem mit "Random" Java Basics - Anfänger-Themen 5
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
xanxk Problem For-Schleife mit Charakter Java Basics - Anfänger-Themen 2
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
sserio Liste erstellt und ein Problem mit dem Index Java Basics - Anfänger-Themen 8
sserio Schwimmen als Spiel. Problem mit to String/ generate a card Java Basics - Anfänger-Themen 4
J Schleife Problem Java Basics - Anfänger-Themen 2
D Problem mit der Erkennung von \n Java Basics - Anfänger-Themen 2
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
HeiTim Problem mit der Kommasetzung an der richtigen stelle Java Basics - Anfänger-Themen 59
Temsky34 Problem mit dem Code Java Basics - Anfänger-Themen 17
P Problem mit Calendar.getDisplayName() Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben