LWJGL - Kollisions-Bug (Fallen)

Androbin

Bekanntes Mitglied
Hallo Leute,
ich habe ein Problem mit der Kollisions-Erkennung beim Fallen in LWJGL!

Vorwort:
Ich habe vor kurzem angefangen, eine Art Minecraft/Cubeworld-Klon zu erschaffen.
Der sieht soweit eigentlich schon ganz gut aus, bis auf einen kleinen Fehler:

Aufgabe:
Die Kollisions-Erkennung in X-/Z-Richtung funktioniert bereits, nicht aber in Y-Richtung:
Mein Character soll eine Größe von 2 (LWJGL-Einheiten) haben, dementsprechend muss ich
bei der Kollision im Fallen den Voxel (Block) 2 Einheiten unter dem Kopf (Kamera) abprüfen.

Problem:
Mein Character hält stets 1 Voxel (Block) über dem Boden an.

zuständiger Code:
Java:
...

float old_y = y;

y += speedY /*      */ * delta * 10;
speedY -= Constants.GRAVITY * delta * 10;

if ( y - 2 < 0 || world[ (int) x ][ (int) y - 2 ][ (int) z ] != null ) {
    y = old_y;
    canJump = true;
}

...

Weiß da eventuell jemand von euch Rat?

PS. Der Code des Spiels auf dem momentanen Stand ist im Anhang hinterlegt.
 

Anhänge

  • code.zip
    19,3 KB · Aufrufe: 3

Ruzmanz

Top Contributor
Was soll man da (er)raten? Nimmst anstatt der Zwei eine Eins und es funktioniert wahrscheinlich. Warum das funktioniert solltest du wissen, da das dein Programm ist :bahnhof:

Java:
if ( y - 1 < 0 || world[ (int) x ][ (int) y - 1 ][ (int) z ] != null ) {
y = old_y;
canJump = true;
}
 

Androbin

Bekanntes Mitglied
Was soll man da (er)raten? Nimmst anstatt der Zwei eine Eins und es funktioniert wahrscheinlich. Warum das funktioniert solltest du wissen, da das dein Programm ist :bahnhof:

Java:
if ( y - 1 < 0 || world[ (int) x ][ (int) y - 1 ][ (int) z ] != null ) {
y = old_y;
canJump = true;
}
Möchte man meinen, oder?
Nur leider funktioniert es nicht!

PS. Glaubst du wirklich ich wäre so blöd, das nicht auszuprobieren?
 

Androbin

Bekanntes Mitglied
EDIT:
Hab's nochmal getestet:
Man hält immer auf der Höhe an,
auf der man losgesprungen ist.
(Mit besagter Umstellung)
 
Zuletzt bearbeitet:

Ruzmanz

Top Contributor
Gehen wir von deinem speziellen Fall aus, dann muss es einen Boden geben!

Java:
if (world[ (int) x ][ (int) y - 2][ (int) z ] != null) {
    y = old_y;
    canJump = true;
}

PS: Was passiert bei "y-3?
PS2: Und wenn der weiterhin an der selben Stelle landet würde ich einfachmal das if-Statement entfernen. Vielleicht bewirkt die auch gar nichts.
 
Zuletzt bearbeitet:

Androbin

Bekanntes Mitglied
Gehen wir von deinem speziellen Fall aus, dann muss es einen Boden geben!

Java:
if (world[ (int) x ][ (int) y - 2][ (int) z ] != null) {
    y = old_y;
    canJump = true;
}

PS: Was passiert bei "y-3?
PS2: Und wenn der weiterhin an der selben Stelle landet würde ich einfachmal das if-Statement entfernen. Vielleicht bewirkt die auch gar nichts.
1. Einen Boden gibt es + zufällig in der Landschaft verteilte Voxel (Blöcke)
2. Bei "y - 3" kann ich überhaupt nicht mehr springen
3. Natürlich bewirkt das was, sonst würde ich ja durch den Boden krachen
 

Androbin

Bekanntes Mitglied
Ich habe die Abarbeitung der Physik (etwas) abgeändert:
Java:
/* Physik */ {
    
    /* Springen & Fallen */ {
        
        /**/ y += speedY  * delta * 10f;
        speedY -= GRAVITY * delta * 10f;
        
    }
    
    /* Kollision */ {
        
        /*   */ if ( world[ (int) x ][ (int)   old_y /*                  */ ][ (int) old_z ] != null ||
                /**/ world[ (int) x ][ (int) ( old_y + 0.5f * PLAYER_SIZE ) ][ (int) old_z ] != null ||
                /**/ world[ (int) x ][ (int) ( old_y + /*  */ PLAYER_SIZE ) ][ (int) old_z ] != null )
            /*    */ x = old_x;
        
        /**/ if ( y < 0f || y > WORLD_HEIGHT - 1f ||
                /**/ world[ (int) old_x ][ (int)   y /*                  */ ][ (int) old_z ] != null ||
                /**/ world[ (int) old_x ][ (int) ( y + 0.5f * PLAYER_SIZE ) ][ (int) old_z ] != null ||
                /**/ world[ (int) old_x ][ (int) ( y + /*  */ PLAYER_SIZE ) ][ (int) old_z ] != null )
        /*   */ { y = old_y; canJump = true; }
        
        /*   */ if ( world[ (int) old_x ][ (int)   old_y /*                  */ ][ (int) z ] != null ||
                /**/ world[ (int) old_x ][ (int) ( old_y + 0.5f * PLAYER_SIZE ) ][ (int) z ] != null ||
                /**/ world[ (int) old_x ][ (int) ( old_y + /*  */ PLAYER_SIZE ) ][ (int) z ] != null )
            /*    */ z = old_z;
        
    }
    
    /* Weltabgrenzung */ {
        
        if ( x - 0.5f < 1 ) x = 1.5f;
        else if ( x + 0.5f > WORLD_WIDTH - 1 )
            x = WORLD_WIDTH - 1.5f;
        
        if ( y < 1f ) { y = 1f; canJump = true; }
        else if ( y + PLAYER_SIZE > WORLD_HEIGHT - 1f )
            y = WORLD_HEIGHT - 1f - PLAYER_SIZE;
        
        if ( z - 0.5f < 1f ) z = 1.5f;
        else if ( z + 0.5f > WORLD_WIDTH - 1f )
            z = WORLD_WIDTH - 1.5f;
        
    }
    
}
Nur leider ohne Erfolg! Hat denn wirklich keiner von euch eine brauchbare Idee, wieso ich immer in Absprungs-Höhe hängen bleibe?
 

Ruzmanz

Top Contributor
Implementiere es halt nochmal. Schritt für Schritt. Wie schnell fällst du eigentlich? Nicht, dass dein deltaY so groß ist, dass du nie auf den Boden fallen kannst ...

if(collision auf Y-Achse) {
// anstatt y = old_y;
y = Spieler.getY()+1.999d
}
 

Androbin

Bekanntes Mitglied
Ziel ist es dich so nah wie möglich an den Boden zu setzen, sodass keine "Lücke" entsteht.
1. Erklärt das noch immer nicht, WIESO es so nicht funktioniert
2. Zu deinem Vorschlag:
2.1 Kann es ja nach wie vor sein, dass ich in einen Block krache, wenn ich es so mache, wie du
2.2 Könnte ich mich denn nicht GLEICH 2 Blöcke nach unten schieben (anstatt 1.999)? Was ist denn da der Hintergedanke?
 

lord239123

Bekanntes Mitglied
Kann es evtl sein, dass die Position des Spielers sich an dessen Füßen befindet?
Dann müsstest du statt y-2 einfach y verwenden.
 
Zuletzt bearbeitet:

Androbin

Bekanntes Mitglied
PROBLEM GELÖST !!!
Ich hatte schlichtweg vergessen, bei einer Kollision speedY = 0 zu setzen :oops:

PS. Wo ist denn eigentlich der "Thema schließen"-Button geblieben?
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
coolian lwjgl glfw window zeigt nur grau an Spiele- und Multimedia-Programmierung 0
coolian slick lwjgl text darstellen mit UnicodeFont funktoniert nicht? Spiele- und Multimedia-Programmierung 11
F OpenGL (LWJGL) Shader Programmierung GLSL Spiele- und Multimedia-Programmierung 2
Meeresgott LWJGL 3 Problem mit einer Texture Spiele- und Multimedia-Programmierung 4
V LWJGL GUI Spiele- und Multimedia-Programmierung 1
V GUI in LWJGL 2 erstellen Spiele- und Multimedia-Programmierung 6
C GLSL Shaderprogrammierung in LWJGL 3 Spiele- und Multimedia-Programmierung 12
G Low Poly 3D LWJGL Shader Problem Spiele- und Multimedia-Programmierung 4
B LWJGL OpenGL SIGSEGV auf Linux (Verzweiflung :/) Spiele- und Multimedia-Programmierung 8
G LWJGL .obj .mtl loader Spiele- und Multimedia-Programmierung 3
G 2D animationen LWJGL Spiele- und Multimedia-Programmierung 0
pcfreak9000 "Allgemeine" Performance verbessern (LWJGL 2) Spiele- und Multimedia-Programmierung 2
G LWJGL Rendert nicht Spiele- und Multimedia-Programmierung 3
G lwjgl verwendung Spiele- und Multimedia-Programmierung 6
R [LWJGL] Skeletal Animation Spiele- und Multimedia-Programmierung 5
E LWJGL glGenVertexArrays() erzeugt doppelte IDs Spiele- und Multimedia-Programmierung 3
G Java 2D Spiel mit LWJGL verbinden Spiele- und Multimedia-Programmierung 1
Streeber Problem mit Transparenz/TextDrawing in LWJGL/Slick2d (OpenGL) Spiele- und Multimedia-Programmierung 1
K No Lwjgl Spiele- und Multimedia-Programmierung 2
T LWJGL 2.9.2: Seltsamer Effekt beim Rendern (VertexShader Problem?) Spiele- und Multimedia-Programmierung 3
T LWJGL: Terrain-Texturen / 2D-Array in Shader? Spiele- und Multimedia-Programmierung 2
S 2D-Render Probleme LWJGL 2 (Java) Spiele- und Multimedia-Programmierung 1
P java lwjgl Game Spiele- und Multimedia-Programmierung 0
T [LWJGL] Textur / File wieder freigeben Spiele- und Multimedia-Programmierung 4
F [LWJGL] Skeletal Animation 3D Spiele- und Multimedia-Programmierung 1
C Generelle Hilfe zur lwjgl Spiele- und Multimedia-Programmierung 0
D LWJGL gluLookAt "Umschauen" Problem Spiele- und Multimedia-Programmierung 0
D Problem mit Würfelanimierung in LWJGL Spiele- und Multimedia-Programmierung 7
RalleYTN LWJGL Vignette Spiele- und Multimedia-Programmierung 2
E LWJGL Switchen zwischen gluOrtho und gluPerspective Spiele- und Multimedia-Programmierung 0
RalleYTN LWJGL Rotation Spiele- und Multimedia-Programmierung 1
C LWJGL Color Picking Textures deaktivieren Spiele- und Multimedia-Programmierung 0
K FBO Framebuffer object [LWJGL] 2D tutorial gesucht Spiele- und Multimedia-Programmierung 2
K [LWJGL] 2D Tunneler Hintergrund Spiele- und Multimedia-Programmierung 7
S LWJGL 3d-spieleentwicklung Spiele- und Multimedia-Programmierung 3
H LWJGL-Renderfail Spiele- und Multimedia-Programmierung 1
Seikuassi LWJGL - Texturen flackern Spiele- und Multimedia-Programmierung 2
K Schiessen in 2D (LWJGL) Spiele- und Multimedia-Programmierung 2
S LWJGL Kamera Problem - Alles verzerrt Spiele- und Multimedia-Programmierung 4
U Kann nur ein Objekt mit LWJGL rendern Spiele- und Multimedia-Programmierung 2
X LWJGL | Parent.isDisplayable() must be true | wie kann man das zu true machen? Spiele- und Multimedia-Programmierung 0
X [LWJGL] Binden von Texturen per PNG File und Texture Sheet Spiele- und Multimedia-Programmierung 1
X LWJGL - Anklick baren Button erstellen aber wie? Spiele- und Multimedia-Programmierung 6
U Quadrate anklicken LWJGL Spiele- und Multimedia-Programmierung 3
B LWJGL / OPENGL Kriege Depth-Test nicht hin :( Spiele- und Multimedia-Programmierung 0
B LWJGL Manche Seiten werden transparent angezeigt Spiele- und Multimedia-Programmierung 2
T LWJGL VBO's funktionieren nicht, geben aber auch keinen Fehler Spiele- und Multimedia-Programmierung 0
U Komische fragmente bei LWJGL Spiele- und Multimedia-Programmierung 6
B LWJGL StackOverFlow Problem nach 30sekunden. (Pong) Spiele- und Multimedia-Programmierung 2
Q LWJGL - Alpha-Probleme Spiele- und Multimedia-Programmierung 2
S [LWJGL] Zweimal selbe Textur trotz unterschiedlicher IDs Spiele- und Multimedia-Programmierung 3
O LWJGL AWTGLCanvas Tiefe auf 1 beschränkt Spiele- und Multimedia-Programmierung 5
Seikuassi LWJGL-Problem Spiele- und Multimedia-Programmierung 2
S [LWJGL] schwarzer Bildschrim beim rendern von .obj Model Spiele- und Multimedia-Programmierung 2
S [lwjgl] Renderbug bei mehreren Objekten Spiele- und Multimedia-Programmierung 2
R LWJGL: OpenGL Fehler - weitere Informationen auslesen möglich? Spiele- und Multimedia-Programmierung 2
S LWJGL Kamera Koordinaten invertiert. Spiele- und Multimedia-Programmierung 2
M LWJGL Text rendern Spiele- und Multimedia-Programmierung 3
B LWJGL Mauskoordinaten Spiele- und Multimedia-Programmierung 1
J LWJGL Update Schleife (Snake) Spiele- und Multimedia-Programmierung 6
B LWJGL Display.update() ist langsam Spiele- und Multimedia-Programmierung 5
R LWJGL: Performance glBegin, drawList, ... Spiele- und Multimedia-Programmierung 16
R LWJGL: Object Loader -> .obj, .c4d, ... laden Spiele- und Multimedia-Programmierung 3
R LWJGL: Textur -> unsichtbare Stellen, wie erzeugen? Spiele- und Multimedia-Programmierung 4
A LwJGL - Animation Stockt Spiele- und Multimedia-Programmierung 5
R [lwjgl] Cursor -> versetzt Zeichnen / Bild ist umgedreht Spiele- und Multimedia-Programmierung 2
R LWJGL: 3D Picking Spiele- und Multimedia-Programmierung 4
F LWJGL: Textur ändern mit GL11.readPixels Spiele- und Multimedia-Programmierung 5
F LWJGL: Licht und GL_LINES funktioniert nicht Spiele- und Multimedia-Programmierung 6
A [LWJGL] BMP Textur wird nicht richtig dargestellt Spiele- und Multimedia-Programmierung 8
S LWJGL Rechteck wird nicht gezeichnet Spiele- und Multimedia-Programmierung 6
F LWJGL: Is undefined? Spiele- und Multimedia-Programmierung 7
F LWJGL Kamerabug Spiele- und Multimedia-Programmierung 2
F LWJGL Problem mit Erstellen eines Objekts und der Kamera Spiele- und Multimedia-Programmierung 5
F LWJGL Dreidimensionaler Würfel Spiele- und Multimedia-Programmierung 15
P LWJGL oder OpenGL (C++) Spiele- und Multimedia-Programmierung 7
P "Tiefe" in Objekten - LWJGL Spiele- und Multimedia-Programmierung 12
T LWJGL 3D Objekt Collision: Wie? Spiele- und Multimedia-Programmierung 11
S LWJGL Kamera Frage Spiele- und Multimedia-Programmierung 2
V Komischer Fehler in LWJGL Spiele- und Multimedia-Programmierung 18
Z lwjgl oder jogl nutzen Spiele- und Multimedia-Programmierung 9
Y LWJGL Hintergrund Spiele- und Multimedia-Programmierung 7
Creylon [LWJGL] Textur wird falsch angezeigt Spiele- und Multimedia-Programmierung 12
Creylon [LWJGL] Spiel Exportieren Spiele- und Multimedia-Programmierung 2
Creylon [LWJGL] 2D Sprite Rotieren/Drehen Spiele- und Multimedia-Programmierung 6
CookieSoft LWJGL Ubuntu 12.04 Fehler Spiele- und Multimedia-Programmierung 7
E [LWJGL] Karusell, mehrere Objekte drehen sich um einen Mittelpunkt Spiele- und Multimedia-Programmierung 31
F lwjgl - Skysphere Spiele- und Multimedia-Programmierung 3
CookieSoft Slick und LWJGL Texture lag Spiele- und Multimedia-Programmierung 13
U OpenGl 1.1 (LWJGL GL11.*) und weiter? Spiele- und Multimedia-Programmierung 7
0 Grafikfehler LWJGL Spiele- und Multimedia-Programmierung 2
A LWJGL 3D Objekte Kollision Spiele- und Multimedia-Programmierung 3
Luk10 (LWJGL) Aufwendiges Animieren von Texturen Spiele- und Multimedia-Programmierung 16
S (LWJGL) VertexBufferObjects Spiele- und Multimedia-Programmierung 20
T LWJGL Grafik meines Projektes läuft nicht korrekt auf meinem iMac Spiele- und Multimedia-Programmierung 19
B LWJGL/OpenGL rendert manche Objekte nicht Spiele- und Multimedia-Programmierung 6
H LWJGL: Fragen zum Verständnis Spiele- und Multimedia-Programmierung 7
T LWJGL Gui erstellen Spiele- und Multimedia-Programmierung 7
Kenan89 lwjgl Exception Spiele- und Multimedia-Programmierung 3
Z Anfängerfrage: Text anzeigen mit LWJGL Spiele- und Multimedia-Programmierung 2

Ähnliche Java Themen

Neue Themen


Oben