Problem mit Kollisionsabfrage beim Fallen Jump & Run

Neew

Mitglied
Hallo,
ich programmiere gerade als Schulprojekt ein Jump&Run in Java und komme dabei auch ganz gut vorwärts, allerdings beiße ich mir im Moment die Zähne dabei aus, meine Figur einfach fallen zu lassen, wenn sie keinen Boden unter den Füßen hat.

Ich benutzte die Intersects(o)-Methode wie im Tutorial von Quaxli (einfache Kollision S.64).

Mein Gedanke war, immer wie folgt zu prüfen:
Java:
if(this.intersects(o){
...
}
else if(!this.intersects(o)&&dy==0){
y+=0.5;
}

Also wenn er keine Überschneidung hat und er nicht springt, erhöht sich der Y-Wert bis er den Boden berührt. Danach sollte er nicht mehr in die Abfrage kommen und meine Figur ist am Boden. So die Theorie. In der Praxis geht er aber immer in diese Abfrage und sorgt so dafür, dass man nicht mehr springen kann oder man fällt sofort durch den Boden.

Hier noch der ganze Codeabschnitt, fürs Springen und Fallen. War es evtl. nicht ganz so schlau das so mit der move Methode zu mischen?
Java:
public class Spieler extends Objekt {
	
	boolean ok=true;
	boolean ersterdurchlauf=true;
	double yalt;

[...Andere Methoden etc...]

public void move(long zeit_letzte_schleife){
		
		if (dx!=0){ //Wenn Tempo nicht 0
			x+=dx*(zeit_letzte_schleife/1e9); //ändere Position 
		}
		
		if(dy!=0){ //Wenn Tempo nicht 0
			if(ersterdurchlauf){ //Speichere Absprungs Höhe
			yalt=getY();
			ersterdurchlauf=false;}
		if (ok){ //Sprunglogik
			y+=-0.8;
			System.out.println("Hoch "+y);}
		if(y<=yalt-60){
			ok=false;
			System.out.println("Oben angekommen "+y);
			GamePanel.hoch=false;
			GamePanel.runter=true;}
		if(!ok){
			y+=0.8;
			System.out.println("Runter "+y);
			}
		}
		
		if(y>=400){//Verloren wenn Figur zu weit unten
			GamePanel.setGameStarted(false);
		}
		
		}

	@Override
	public boolean kollision(Objekt o) {
		if(this.intersects(o)){
		
		System.out.println("intersect");
		ok=true;
		ersterdurchlauf=true;
		GamePanel.blocked=false; //ja nicht sehr edel aber es soll erstmal funktionieren ;)
		GamePanel.runter=false; //      -"-
		return false;
		}else{			
			if(!this.intersects(o)&&dy==0){ 
			System.out.println("bin drin");
			y+=0.5;
			return false;
			}
			}
		return false;
	}

Ich wäre für einen Denkanstoß sehr dankbar und sei es auch nur die Info, weshalb das so überhaupt nicht funktionieren kann :D.
Ich komme jetzt seit 2 Tagen nicht mehr weiter und ich wette die Lösung ist so simpel..

Spiel, ohne "Fallen Abfrage"(Wer es testen will, muss nur den Code in der Klasse Spieler einfügen)
 

Fu3L

Top Contributor
Ich würde tatsächlich nicht so viel mischen. Was ist denn, wenn du kollision auch für die Gegner verwenden willst? Dann fällst du ständig durch den Boden^^ (Im übrigen ist !this.intersects am Anfang vom else doppelt gemoppelt ;) Außerdem sollten Methodennamen tuWörter :)D) sein)

Ansonsten könnten diese ganzen Variablen (müssen die unbedingt statisch sein? (Suggestivfrage^^ ;))) sonst was bewirken oder aber oben genanntes Negativbeispiel ist sogar der Fall oder der Boden hat eine falsche Shape, da kann so ziemlich alles schuld sein^^
 
Zuletzt bearbeitet:

Neew

Mitglied
Danke erstmal für die schnelle Antwort!

Wenn ich das richtig verstehe, kann ich meinen ganzen Ansatz noch einmal überarbeiten? :D

Das mit dem else und !this.intersects(o) habe ich extra so gemacht, da es mich so aufgeregt hat, dass die Figur trotz intersect (in der Konsolo wird "intersect" ausgegeben) die else Bedingung danach auch ausführt und dadurch meine Sielfigur durch den Boden fällt..
 

Neew

Mitglied
So, wollte nur sagen, dass ich das Problem lösen konnte und da das für alle interessant sein kann, die Quaxlis Vorlage nutzen und genauso blöd sind wie ich, hier die Lösung:

Mein Gedanke war: Wenn die Spielfigur in der Luft steht gibt es kein intersect, also kann ich dann so lange die y-Position anpassen, bis intersect=true. Also das:
Java:
if(this.intersects(o){
...
}
else if(!this.intersects(o)){
y+=0.5;
}



Benutzt man nun nur die einfache Kollisionsabfrage, wird bei !this.intersect() auf ALLE Objekte geprüft die es gibt, bei 20 Objekten z.b. wird 1 mal das Objekt auf dem die Spielfigur sich befindet und 19x die Objekte auf denen sich die Spielfigur nicht befindet geprüft.

Steht man nun auf einem Objekt, wird trotzdem 19x die Anweisung ausgefürt, da man 19 Objekte nicht berührt. Folge: Man fällt durch den Boden.:D

Ein einfaches Workaround wäre folgendes:
Java:
int count=0;
if(this.intersects(o){
count=0;
}
else if(!this.intersects(o)&&dy==0){
count++;
if(count>19){
y+=0.5;
}
}
 

Fu3L

Top Contributor
:eek: (Tschuldige, netter gehts nicht^^)

Du weißt doch wohl, welches Objekt "der" Boden ist und prüfst dann nur den Boden, um dann zu testen, ob die Figur fällt. Was machst du denn, wenn ein Objekt auf mal in der Reihenfolge davor ist?^^
 

Neew

Mitglied
Um ehrlich zu sein:
ich habe das alles sehr unschön gelöst ^^

Ich weiß nicht, welches Objekt "der" Boden ist. Ich prüfe einfach immer auf alle Objekte die ich habe und wenn ich auch nur eins davon berühre, weiß ich, dass ich stehe. Das macht natürlich vieles komplexer und steigert auch den Rechenaufwand aber ich wusste mir einfach nicht anders zu helfen :D

Wenn ich nur auf "den" Boden prüfen würde, müsste ich ja in irgend einer Form die x und y Positionen meiner Spielfigur und des "Boden-Objektes" vergleichen aber wie genau das geht weiß ich bis jetzt nicht. Ich versuch das alles mit Learning by Doing oder Trying ;)

Normal mach ich immer alles so, dass es geht, bis es zu Problemen kommt. Dann überdenke ich meinen Ansatz, Mach es anders bis wieder ein Problem auftritt usw. Das geht immer im Kreis und am Ende kommt auch meist was Gutes dabei raus. Braucht zwar länger aber ich mekrs mir dann besser :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Problem bei Kollisionsabfrage Spiele- und Multimedia-Programmierung 4
T Problem mit Kollisionsabfrage der NPC Spiele- und Multimedia-Programmierung 1
J Problem bei pixelgenauer Kollisionsabfrage Spiele- und Multimedia-Programmierung 10
baddestpoet Problem mit Kollisionsabfrage Spiele- und Multimedia-Programmierung 18
A [HILFE] - Minecraft-Problem! Spiele- und Multimedia-Programmierung 1
C Plugin Problem Spiele- und Multimedia-Programmierung 2
J JLayer Problem Spiele- und Multimedia-Programmierung 1
Meeresgott LWJGL 3 Problem mit einer Texture Spiele- und Multimedia-Programmierung 4
G Low Poly 3D LWJGL Shader Problem Spiele- und Multimedia-Programmierung 4
O Problem beim Aufrufen des Spiels von einem Menü Spiele- und Multimedia-Programmierung 7
G LIBGDX Texturen Problem Spiele- und Multimedia-Programmierung 1
G LIBGDX Problem beim resizen des Frames Spiele- und Multimedia-Programmierung 3
C AutoClicker Problem Spiele- und Multimedia-Programmierung 2
S OOP Logik Problem Spiele- und Multimedia-Programmierung 5
G LIBGDX Viewport Problem Spiele- und Multimedia-Programmierung 3
J Problem mit Game Of Life Spiele- und Multimedia-Programmierung 3
N Problem mit 2D Spiel Spiele- und Multimedia-Programmierung 17
C Minecraft Minecraft Plugin Problem Spiele- und Multimedia-Programmierung 17
R Pong Spiel Problem Spiele- und Multimedia-Programmierung 1
V Problem mit BufferStrategy Spiele- und Multimedia-Programmierung 2
Streeber Problem mit Transparenz/TextDrawing in LWJGL/Slick2d (OpenGL) Spiele- und Multimedia-Programmierung 1
E A-Stern Algorithmus Problem und Implementierung einer Map Spiele- und Multimedia-Programmierung 6
T LWJGL 2.9.2: Seltsamer Effekt beim Rendern (VertexShader Problem?) Spiele- und Multimedia-Programmierung 3
W Generelles Problem: Entscheidungsfindung Spiele- und Multimedia-Programmierung 4
C Vier Gewinnt Problem mit Ordnerstruktur Spiele- und Multimedia-Programmierung 2
T Problem mit Eclipse (java)-(minecraft) Spiele- und Multimedia-Programmierung 3
I Textbasiertes Spiel - Umsetzungsfrage & Schleifen Problem Spiele- und Multimedia-Programmierung 26
M Sound Problem Spiele- und Multimedia-Programmierung 3
T Problem beim Aufbau des Spielfelds Spiele- und Multimedia-Programmierung 18
M Sound Engin Problem 2 Spiele- und Multimedia-Programmierung 2
J Problem bei der GUI - Zu viele Spielbretter Spiele- und Multimedia-Programmierung 2
D LWJGL gluLookAt "Umschauen" Problem Spiele- und Multimedia-Programmierung 0
D Problem mit Würfelanimierung in LWJGL Spiele- und Multimedia-Programmierung 7
C Zeldaklon Problem mit Wand-Kollision Spiele- und Multimedia-Programmierung 8
0 Boxen übereinander stapelt Problem Spiele- und Multimedia-Programmierung 5
D Textfield im Game ,Problem: while-Schleife Spiele- und Multimedia-Programmierung 3
R 2D platformer - enemy damage -> TIMER PROBLEM Spiele- und Multimedia-Programmierung 3
S LWJGL Kamera Problem - Alles verzerrt Spiele- und Multimedia-Programmierung 4
B LWJGL StackOverFlow Problem nach 30sekunden. (Pong) Spiele- und Multimedia-Programmierung 2
Seikuassi LWJGL-Problem Spiele- und Multimedia-Programmierung 2
L Minecraft Minecraft Plugin programmieren (Craftbukkit 1.7.2) Problem Spiele- und Multimedia-Programmierung 4
B Minecraft mehr Ram zuweißen Problem Spiele- und Multimedia-Programmierung 0
K Bukkit Plugin Problem Spiele- und Multimedia-Programmierung 3
Y Problem mit repaint() in run() Spiele- und Multimedia-Programmierung 2
X Kleines Problem mit Java Reflections und einem eigenen Eventhandler Spiele- und Multimedia-Programmierung 1
J Minecraft Problem mit dem JRE - Minecraft Spiele- und Multimedia-Programmierung 3
TheSorm Problem mit 2 classen NullPointerException Spiele- und Multimedia-Programmierung 1
S Problem mit 4 gewinnt(MinMax Algorithmus) Spiele- und Multimedia-Programmierung 2
N Problem in der Main.class Spiele- und Multimedia-Programmierung 1
J Blöcke, Hitboxen, Koolisionsabfrage - Problem Spiele- und Multimedia-Programmierung 8
S Problem mit 3d-Polygon Spiele- und Multimedia-Programmierung 2
A Problem mit Sound Spiele- und Multimedia-Programmierung 5
C Nxt Duell Problem Spiele- und Multimedia-Programmierung 4
F LWJGL Problem mit Erstellen eines Objekts und der Kamera Spiele- und Multimedia-Programmierung 5
ruerob Problem bei Fade-Out von Sounds Spiele- und Multimedia-Programmierung 3
L [Slick2D] Problem bei Speicherfreigabe Spiele- und Multimedia-Programmierung 2
M Bukkit Plugin Problem Spiele- und Multimedia-Programmierung 22
T Java3D Rendering Problem Spiele- und Multimedia-Programmierung 7
F Problem mit dem Abspielen von byte[] (Audioprogrammierung) Spiele- und Multimedia-Programmierung 2
C Problem mit Abspielen von Audio-Dateien Spiele- und Multimedia-Programmierung 3
R Problem bei Farbe ändern/4Gewinnt Spiele- und Multimedia-Programmierung 5
R StringIndexOutOfBoundsException - Problem Spiele- und Multimedia-Programmierung 2
S Problem mit Sichtfeld/Licht in einem Raster Spiele- und Multimedia-Programmierung 5
G Acht-Damen-Problem HILFE! Spiele- und Multimedia-Programmierung 11
A TileMap KeyListener - Problem Spiele- und Multimedia-Programmierung 2
J Problem mit Threads Spiele- und Multimedia-Programmierung 8
S Problem mit Zeitsteuerung der Game Loop Spiele- und Multimedia-Programmierung 4
Fu3L Problem mit 3D Noise Spiele- und Multimedia-Programmierung 4
L Problem beim Rätsellöser Spiele- und Multimedia-Programmierung 3
D Problem beim bewegen einer Figur Spiele- und Multimedia-Programmierung 2
T Problem bei LinkedList / JPanel Spiele- und Multimedia-Programmierung 4
T Problem mit ClassLoader und LWJGL Spiele- und Multimedia-Programmierung 5
M Scrolling Repaint Problem Spiele- und Multimedia-Programmierung 2
Samake03 [Problem] layeredPane bzw. Viewport Spiele- und Multimedia-Programmierung 3
Helgon glTexParameter / glTexImage2D Problem Spiele- und Multimedia-Programmierung 11
T Jmonkey opengl problem Spiele- und Multimedia-Programmierung 13
M Problem mit Kamera (glMultMatrix (OpenGL/ LWJGL)/ Quaternionen) Spiele- und Multimedia-Programmierung 5
M Problem mit Gameserver / Datensynchronisation Spiele- und Multimedia-Programmierung 10
G Mein erstes minigame -> problem mit Methode Spiele- und Multimedia-Programmierung 3
X Geometry Wars Clone Problem Spiele- und Multimedia-Programmierung 4
H Problem mit JMonkeyEngine3 und OgreXML Spiele- und Multimedia-Programmierung 3
D [JOGL 2.0] Kleines Problem mit freier Flugsteuerung Spiele- und Multimedia-Programmierung 3
A JAVA3D TransformGroup <--> Group Problem Spiele- und Multimedia-Programmierung 3
U [JOGL 1.1.1a]Kleines Problem mit Text Overlays: Spiele- und Multimedia-Programmierung 19
T Problem mit JnR-Steuerung / KeyListener Spiele- und Multimedia-Programmierung 6
D Problem Mit Miensweeper Clone & rekursive Methode Spiele- und Multimedia-Programmierung 4
M Performance Problem bei BufferedImage Spiele- und Multimedia-Programmierung 7
T Problem mit Speicherverbrauch Spiele- und Multimedia-Programmierung 5
S Programmstruktur Problem! Spiele- und Multimedia-Programmierung 8
BattleMaster246 Problem mit Jogl Spiele- und Multimedia-Programmierung 14
C MP3 Handler-Problem Spiele- und Multimedia-Programmierung 13
C [gelöst] MP3-Codec-Problem Spiele- und Multimedia-Programmierung 2
K Schiebepuzzle Array Zufallszahlen Problem Spiele- und Multimedia-Programmierung 8
J Java 3D Problem Spiele- und Multimedia-Programmierung 2
G Eclipse Problem mit Java3d Spiele- und Multimedia-Programmierung 3
H Repaint-Problem mit Quaxlis Tutorial Spiele- und Multimedia-Programmierung 2
C Java Sound API Clip.Close() Problem Spiele- und Multimedia-Programmierung 1
K Problem beim Anzeigen von Bildern Spiele- und Multimedia-Programmierung 5
D Problem mit Überprüfung beim Lottospiel Spiele- und Multimedia-Programmierung 6
D Problem beim Öffnen einer PHP für eine Highscore Spiele- und Multimedia-Programmierung 5

Ähnliche Java Themen

Neue Themen


Oben