Java Game performance Probleme

JavaGamer

Bekanntes Mitglied
Hallo,

ich arbeite momentan an einen kleinen Java 2D-Game, doch leider ist irgend etwas beim letzten Update schief gegangen und jetzt updatet das Game mit 4 FPS und 20 Ticks und ist extrem langsam. Zudem spawnt der Spieler im Block anstatt auf diesen.
In der vorherigen Version hat noch alles einwandfrei funktioniert.

Weiss vielleicht einer, was ich falsch mache???:L (ich selbst finde den Fehler nicht... :( ).
Zudem verwende ich Eclipse Luna mit Java 8.

EDIT:
Bevor ich es vergesse, weiss jemand wie ich die Collision behebe, da wenn du schnell genug bist, kannst du durch Blöcke durch springen. Zudem wie kann ich verhindern, dass der Spieler während des Fallens springen kann?

Ich hoffe ihr könnt mir helfen! (Das Eclipse-Projekt befindet sich im Anhang samt Code und benötigter Bilder...)

JavaGamer
 

Anhänge

  • Platformer.7z
    15,8 KB · Aufrufe: 19
Zuletzt bearbeitet:

Androbin

Bekanntes Mitglied
JavaGamer hat gesagt.:
Bevor ich es vergesse, weiss jemand wie ich die Collision behebe, da wenn du schnell genug bist, kannst du durch Blöcke durch springen.
Ganz einfach, schreib deinen Code so um, dass deine Methode "move", etc. dich um nur einen Pixel bewegt und mach dir ne for-Schleife, die in etwa so aussieht:
Java:
int speedX = this.speedX;
if ( speedX > 0 ) {
	for ( int x = 0; x < speedX; x++ ) {
		move( Richtung.Rechts );
	}
} else {
	for ( int x = 0; x < -speedX; x++ ) {
		move( Richtung.Links);
	}
}
JavaGamer hat gesagt.:
Zudem wie kann ich verhindern, dass der Spieler während des Fallens springen kann?
Mit Hilfe eines boolean's "canJump" kannst du speichern, ob der Spieler den Boden bereits wieder berührt hat, nachdem die Variable beim Springen auf "false" gesetzt wurde.

PS. Seltsam, genau die gleichen Probleme hatte ich auch erst vor Kurzem ...
 

JavaGamer

Bekanntes Mitglied
Ganz einfach, schreib deinen Code so um, dass deine Methode "move", etc. dich um nur einen Pixel bewegt und mach dir ne for-Schleife, die in etwa so aussieht:
Java:
int speedX = this.speedX;
if ( speedX > 0 ) {
	for ( int x = 0; x < speedX; x++ ) {
		move( Richtung.Rechts );
	}
} else {
	for ( int x = 0; x < -speedX; x++ ) {
		move( Richtung.Links);
	}
}

Mit Hilfe eines boolean's "canJump" kannst du speichern, ob der Spieler den Boden bereits wieder berührt hat, nachdem die Variable beim Springen auf "false" gesetzt wurde.

PS. Seltsam, genau die gleichen Probleme hatte ich auch erst vor Kurzem ...

Problem wäre nur dass ich gar keine move-Methode besitze, sondern einfach nur die Position des Spielers um 5 erhöhe wenn dieser Button gedrückt wurde (also über KeyEvent). Und wohin mit der for-Schleife?
Und was ist dann mit der Kamera, man sieht ja auch, nachdem der Spieler plaziert wurde, wie der Screen angezeigt wird und dann erst die Position der Kamera geändert wird, was eigentlich so schnell geht, dass dies nicht sichtbar ist...
 

Androbin

Bekanntes Mitglied
Problem wäre nur dass ich gar keine move-Methode besitze, sondern einfach nur die Position des Spielers um 5 erhöhe wenn dieser Button gedrückt wurde (also über KeyEvent). Und wohin mit der for-Schleife?
Soll das etwa heißen, du hast überhaupt keine Kollisions-Abfragen?
Und was ist dann mit der Kamera, man sieht ja auch, nachdem der Spieler plaziert wurde, wie der Screen angezeigt wird und dann erst die Position der Kamera geändert wird, was eigentlich so schnell geht, dass dies nicht sichtbar ist...
Könntest du das bitte nochmal etwas verständlicher erklären?
 

JavaGamer

Bekanntes Mitglied
Soll das etwa heißen, du hast überhaupt keine Kollisions-Abfragen?

Könntest du das bitte nochmal etwas verständlicher erklären?

Eigentlich habe ich wohl eine Kollisions-Abfrage:
Code:
	private void Collision(LinkedList<GameObject> object)
	{
		for(int i = 0; i < this.handler.object.size(); i++)
		{
			GameObject tempObject = this.handler.object.get(i);
			
			if(tempObject.getId() == ObjectId.Block)
			{
				// Top
				if(getBoundsTop().intersects(tempObject.getBounds()))
				{
					this.y = tempObject.getY() + 32;
					this.velY = 0;
				}
				
				// Buttom
				if(getBounds().intersects(tempObject.getBounds()))
				{
					this.y = tempObject.getY() - this.height;
					this.velY = 0;
					this.falling = false;
					this.jumping = false;
				}
				else
				{
					this.falling = true;
				}
				
				// Right
				if(getBoundsRight().intersects(tempObject.getBounds()))
				{
					this.x = tempObject.getX() - this.width;
				}
				
				// Left
				if(getBoundsLeft().intersects(tempObject.getBounds()))
				{
					this.x = tempObject.getX() + 35;
				}
			}
			else if(tempObject.getId() == ObjectId.Restart)
			{
				Player.setStatus(false);
				this.handler.swichtLevel();
			}
		}
	}

Diese wird in der Tick-Methode des Spielers aufgerufen.

Das mit der Kamera ist, dass wenn du das Spiel startest wird die Kamera-Position erst auf 0 gesetzt und dann wird ja das Level geladen und alles andere und dann wird die Kamera an die Position des Spielers gesetzt. Nur eigentlich geht dies so schnell, dass dies nicht zu sehen ist für den Spieler, aber aus irgendeinem Grund momentan schon.
Zudem kann sich der Spieler auch nicht bewegen, da der KeyListener keinen Spieler findet, obwohl dieser vorhanden ist, da dieser ja deutlich sichtbar zu sehen ist....
 
Zuletzt bearbeitet:

JavaGamer

Bekanntes Mitglied
Wirklich keiner der mir weiterhelfen kann, warum alles so langsam ist? (am Thread liegt es definitiv nicht, da dieser funktioniert einwandfrei, auch von der Geschwindigkeit her, nur sobald der Rest vom Code geladen wird, also alles in der init(), render() und tick() Methode/n wird der Thread extrem langsam...

EDIT: Anscheinend stimmt in irgendeiner Klasse etwas mit der tick()-Methode nicht oder diese bremst alles extrem aus, da ohne diese funktioniert alles einwandfrei, bis auf dass der Spieler immer noch nicht gefunden wird...
 
Zuletzt bearbeitet:

Ruzmanz

Top Contributor
Deine Game-Loop sieht sehr seltsam aus. Du solltest dir nochmal ein Tutorial anschauen. Liegt höchstwahrscheinlich an deiner inneren while-Schleife, dessen Sinn ich nicht ganz verstanden habe. (Evtl. kann man die einfach entfernen und alles läuft ...)

Code:
[COLOR="Red"]while(delta >= 1)[/COLOR]
 
Zuletzt bearbeitet:

JavaGamer

Bekanntes Mitglied
Deine Game-Loop sieht sehr seltsam aus. Du solltest dir nochmal ein Tutorial anschauen. Liegt höchstwahrscheinlich an deiner inneren while-Schleife, dessen Sinn ich nicht ganz verstanden habe. (Evtl. kann man die einfach entfernen und alles läuft ...)

Code:
[COLOR="Red"]while(delta >= 1)[/COLOR]

Also den Fehler habe ich jetzt gefunden. :idea: (Habe anscheinend im Kollisionscheck die Zeile
Java:
getBounds().intersects(tempObject.getBounds())
vergessen.)

Also ohne diese while-Schleife geht gar nichts... (keine Grafik etc.) Also die muss da sein.
(Verwende die while-Schleife seit dem ich angefangen habe 2D-Spiele zu programmieren vor 2 Jahren, aber aus irgendeinem Grund bin ich nie mit einem Game fertig geworden... ka warum, aber egal. Kannst ja mal bei TheChernoProject oder RealTutsGML vorbei schauen, die können dir diese bestimmt erklären.)

@Androbin Also das mit deinem for-Loop habe ich in anderer Form ungesetzt... (sobald die Taste gedrückt wird wirst du immer um x-px nach vorne geschoben oder zurück mit einer Laufanimation und sobald du die Taste loslässt stoppt dies halt.
Aber deine canJump funktioniert noch nicht so ganz, wie ich es will:

Dies steht in der Tick-Methode drin.
Java:
		if(!this.canJump)
		{
			this.velY += this.gravity;
			
			if(this.velY > this.MAX_SPEED)
				this.velY = this.MAX_SPEED;
		}
		
		Collision(object);

Und hier der Code in der Collision-Methode, der das canJump ändern soll....
Java:
			if(tempObject.getId() == ObjectId.Block)
			{
				// Buttom --> Kollisionsabfrage wenn die Person auf einen Block steht.... I think... because of ... look a few lines down :D
				if(getBounds().intersects(tempObject.getBounds()))
				{
					this.y = tempObject.getY() - this.height;
					this.velY = 0;
					this.canJump = true;
				}	
				else if(!(getBounds().intersects(tempObject.getBounds()))) // aus irgendeinem Grund ignoriert der das obere.... und nimmt nur dies...
				{
					this.canJump = false; // da nur diese Methode aufgerufen wird und das andere nicht, kann man nicht springen :(
				}
			}

Hier die Zeile aus dem KeyInput:
Java:
				if(key == KeyEvent.VK_W && tempObject.canJump())
				{
					tempObject.setJump(false);
					tempObject.setVelY(-10);
				}

Weisst du oder irgendjemand anderes was daran falsch ist und wie ich dies beheben kann?

Zudem kann der Spieler immer noch durch Wände springen oder in diesen verschwinden...

Und danke für die bisherige Hilfe! :toll:
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Component System Java 2D Game LibGDX Spiele- und Multimedia-Programmierung 6
$ Einstieg in Java Game Development Spiele- und Multimedia-Programmierung 11
BraunBerry Java Game Pixel "einfärben" Spiele- und Multimedia-Programmierung 6
BraunBerry Java Game verbesserte Kollisionserkennung Spiele- und Multimedia-Programmierung 18
BraunBerry Java Game Waypoint System Spiele- und Multimedia-Programmierung 3
P java lwjgl Game Spiele- und Multimedia-Programmierung 0
hdi Das java-forum.org 2D-Game Projekt/Tutorial Spiele- und Multimedia-Programmierung 6
A Java 2D Game Spiele- und Multimedia-Programmierung 4
K Java Game Programming Buch Spiele- und Multimedia-Programmierung 3
M Java online multiplayer game Spiele- und Multimedia-Programmierung 2
J java netzwerk strategie game programmiert Spiele- und Multimedia-Programmierung 4
F Online Game mit Java? Spiele- und Multimedia-Programmierung 11
H LWJGL - Lightweight Java Game Library! Ist Java3D jetzt out? Spiele- und Multimedia-Programmierung 4
xFearofdarkness Feinde überlappen sich in Java Spiel Spiele- und Multimedia-Programmierung 3
A Minecraft Java Buch fehlermeldung Spiele- und Multimedia-Programmierung 61
yakazuqi Minecraft java.lang.Error: Watchdog Spiele- und Multimedia-Programmierung 3
L Fehler bei "Nochmal Spielen" (Java) Spiele- und Multimedia-Programmierung 1
N Minecraft Java Error Spiele- und Multimedia-Programmierung 6
M "Java Datei" Cannot be resolved to a variable Spiele- und Multimedia-Programmierung 2
1Spinne Minecraft Fabric Modding Java Error Spiele- und Multimedia-Programmierung 2
Joris Minecraft Minecraft Java Server Spiele- und Multimedia-Programmierung 6
Shanic Minecraft Minecraft Forge Server "Falsche Java Version" Spiele- und Multimedia-Programmierung 6
O Browser-basiertes online Pokerspiel mit Java Spiele- und Multimedia-Programmierung 1
M Spiel Mühle-Programmierung Java Spiele- und Multimedia-Programmierung 9
G VST-Plugins in Java verwenden Spiele- und Multimedia-Programmierung 0
P Audio Visualizer mit OpenGL in Java? Spiele- und Multimedia-Programmierung 4
P Snake Java Hilfe Spiele- und Multimedia-Programmierung 4
D Minecraft [Minecraft] Java Start Fehler (Core-Dump) Spiele- und Multimedia-Programmierung 1
T Welche packages aus der java api doku ist hilfreich zur Android Spieleprogrammierung Spiele- und Multimedia-Programmierung 2
A Programmieren eines Memorys mit Java (in Eclipse) Spiele- und Multimedia-Programmierung 5
L Sound in Java Spiel Spiele- und Multimedia-Programmierung 5
C Java findet FluidSynth nicht Spiele- und Multimedia-Programmierung 2
I Java Andere Fenster in Borderless-Mode setzen Spiele- und Multimedia-Programmierung 16
leon_krys Java-Bußgeldrechner Spiele- und Multimedia-Programmierung 5
G [Java/KryoNet/LibGDX] Mutliplayer Packet Frage Spiele- und Multimedia-Programmierung 2
P Website mit Java Backend? Spiele- und Multimedia-Programmierung 1
D Java Bild bewegen funktioniert nicht Spiele- und Multimedia-Programmierung 8
J Fertigungstechnik.. PLS HALP.. Quellcode vom Text in java-Klasse speichern Spiele- und Multimedia-Programmierung 2
E Kalah Java Implementation Spiele- und Multimedia-Programmierung 1
G [Java] Vereinfachung von Boolean Abfragen Spiele- und Multimedia-Programmierung 3
G [LibGDX/Java] ArrayList Object Speicher Spiele- und Multimedia-Programmierung 3
T Java 3D Spiele- und Multimedia-Programmierung 2
A Spielfelder erstellen mit Jogl Java durch ein Koordinaten Array Spiele- und Multimedia-Programmierung 1
J Java Buttons Spiele- und Multimedia-Programmierung 6
T Java Kalender Spiele- und Multimedia-Programmierung 5
Ice4P4rty Java Optische Oberfläche Spiele- und Multimedia-Programmierung 2
MABY Eine mp3 Datei in Java abspielen Spiele- und Multimedia-Programmierung 14
D Java Bomberman Probleme java.lang.NullPointerException Spiele- und Multimedia-Programmierung 1
N Spiele-Menü in Java Spiele- und Multimedia-Programmierung 9
J HDMI Ausgänge mit Java programmieren? Spiele- und Multimedia-Programmierung 18
H Yu-Gi-Oh! Mit Java was tun? Spiele- und Multimedia-Programmierung 6
S Pong java.lang.StackOverflowError Spiele- und Multimedia-Programmierung 3
C Java aus Klasse rausgehen Spiele- und Multimedia-Programmierung 2
MaxG. Java Internet Radio Spiele- und Multimedia-Programmierung 6
G [Java Server] Allgemeine Frage zum Thema Networking in Videospielen Spiele- und Multimedia-Programmierung 15
P java.lang.NoClassDefFoundError: in Greenfoot Spiele- und Multimedia-Programmierung 0
G Java Achsen invertieren Spiele- und Multimedia-Programmierung 2
G Java 2D Spiel mit LWJGL verbinden Spiele- und Multimedia-Programmierung 1
S Hilfe bei Java Gui Spiele- und Multimedia-Programmierung 2
D Java sound pulseaudio Spiele- und Multimedia-Programmierung 0
David Schwarzbeck Java 3 dimensionale Kollisions Abfrage Spiele- und Multimedia-Programmierung 2
M Gesellschaftsspiel Mühle in Java programmieren Spiele- und Multimedia-Programmierung 3
beatles Java Minesweeper - OS X und Win7 Unterschied Spiele- und Multimedia-Programmierung 2
D Minecraft Java JDK installiert - Minecraft läuft nichtmehr in 64 Bit Spiele- und Multimedia-Programmierung 2
E TMX - Dateien in Java laden Spiele- und Multimedia-Programmierung 1
K Erstellen eines Fotoalbums mit Java Spiele- und Multimedia-Programmierung 8
windl MoviePlayer in Java Spiele- und Multimedia-Programmierung 0
S 2D-Render Probleme LWJGL 2 (Java) Spiele- und Multimedia-Programmierung 1
F Klausurersatz: Ein Java-Programm erstellen und dieses präsentieren. Spiele- und Multimedia-Programmierung 2
E Java Jump and Run Map zu groß Spiele- und Multimedia-Programmierung 14
J programm mit java-plugin Spiele- und Multimedia-Programmierung 2
D Java Webgame, welche Frameworks oder Techs sind von Nöten? Spiele- und Multimedia-Programmierung 5
P Java 2D Bug? Spiele- und Multimedia-Programmierung 8
T Problem mit Eclipse (java)-(minecraft) Spiele- und Multimedia-Programmierung 3
R Java App sendet Midi Daten über Flash Spiele- und Multimedia-Programmierung 3
O Java Zeile aus Textdatei zufällig ausgeben Spiele- und Multimedia-Programmierung 8
K Bestes Bildformat für Spielegrafiken und deren Einbindung in Java Spiele- und Multimedia-Programmierung 2
D JAVA Basiertes Spiel aus dem Internet in eigenem Client laden Spiele- und Multimedia-Programmierung 1
T Alle Referenzen zu einer Klasse aus Java Bytecode ersetzt, JVM sucht trotzdem diese Klasse Spiele- und Multimedia-Programmierung 1
J Java Kollisionsabfrage Spiele- und Multimedia-Programmierung 21
Flo. android java tastatureingaben abfangen. Spiele- und Multimedia-Programmierung 1
J Java Steuerberechnung hilfe Spiele- und Multimedia-Programmierung 17
C Export als .jar funktioniert nicht richtig (JAVA 3D) Spiele- und Multimedia-Programmierung 5
P Java Grafiken mit Rechnungen verknüpfen Spiele- und Multimedia-Programmierung 4
U Minecraft Mit Java auf Minecraft Server anmelden Spiele- und Multimedia-Programmierung 11
F Das sag mir einer Java ist plattform unabhänig ! Spiele- und Multimedia-Programmierung 10
C virtueller stereomix (java sound API) Spiele- und Multimedia-Programmierung 0
S Engine2D - Java 2D Engine Spiele- und Multimedia-Programmierung 20
C Java Kollisionserkennung Spiele- und Multimedia-Programmierung 4
U Blender in Java Spiele- und Multimedia-Programmierung 8
J Java Fussballspiel Player-KI in der Bewegungsphase Spiele- und Multimedia-Programmierung 4
K Java 15/Slide/Boss Puzzle Spiele- und Multimedia-Programmierung 2
T Java 3D - Step oder IGES Spiele- und Multimedia-Programmierung 1
H 3D Spiele mit Java - Diskussion Spiele- und Multimedia-Programmierung 35
X Kleines Problem mit Java Reflections und einem eigenen Eventhandler Spiele- und Multimedia-Programmierung 1
M Bilder in Java Spiele- und Multimedia-Programmierung 7
A Minecraft Java Ubuntu Minecraft Server startet nicht - ERROR (SIGSEGV) Spiele- und Multimedia-Programmierung 7
N Minecraft java lernen minecraft Spiele- und Multimedia-Programmierung 20
J 2d Ansicht mit Java 3d Spiele- und Multimedia-Programmierung 13
F Abbyy finereader aus java starten, Ergebnis zurück? Spiele- und Multimedia-Programmierung 2

Ähnliche Java Themen

Neue Themen


Oben