Kollisions-Frage

Androbin

Bekanntes Mitglied
Hallo Leute,
hier eine kurze Frage zur Kollision:

Vorwort:
Es geht um einen Minecraft-/Cubeworld-Klon, sprich: Die Welt besteht aus Blöcken.
Und eigentlich würde man die Kollision doch so implementieren:
1. Ändere die Geschwindigkeit in X-/Y-/Z-Richtung gemäß ...
2. Für jede Koordinate
2.1 addiere die zugehörige Geschwindigkeit
2.2 setzte sie auf die alten zurück, falls man dann in einem Block feststeckt

Problem:
Wenn man eine bestimmte Geschwindigkeit erreicht hat, "glitcht" man durch alles hindurch

Lösung-Ansatz:
Man wiederholt die Abfragen einmal pro Block, den man zurücklegt.
Nur leider weiß ich an dieser Stelle nicht weiter...

Hat vielleicht jemand von euch etwas anzumerken?
(einen anderen/besseren ("performanteren") Lösungsweg(/-Ansatz))
 

Gucky

Top Contributor
Meinst du die Kollision zwischen dir und der Welt oder zwischen Blöcken?

Arbeitest du mit einer Engine? JMonkey o. Ä.?


Du könntest den Spieler auch aus einem Block bestehen lassen und dann zwischen dir und dem Zielort Geraden ziehen. Also nach Art des Raytraycings.
 

Androbin

Bekanntes Mitglied
Meinst du die Kollision zwischen dir und der Welt oder zwischen Blöcken?

Arbeitest du mit einer Engine? JMonkey o. Ä.?


Du könntest den Spieler auch aus einem Block bestehen lassen und dann zwischen dir und dem Zielort Geraden ziehen. Also nach Art des Raytraycings.
1. Zwischen mir und der Welt (die Blöcke bewegen sich ja nicht)
2. Ich arbeite mit LWJGL
3. Die Blöcke haben ja ganzzahlige Koordinaten, ich will mich aber auch dazwischen frei bewegen können
Aber was genau ist "Raytraycing"? Könntest du mir das mal genauer erklären?
 

Gucky

Top Contributor
Raytraycing ist Strahlenverfolgung. Ich arbeite an einem Spiel, ähnlich dem Deinen, mit und dort haben wir es so gemacht. Aber zum Abbauen der Blöcke.

Wir haben einen Strahl zwischen der Kamera und der Unendlichkeit in Blickrichtung gezogen und gefragt, was dieser Strahl durchschlägt.
So ähnlich könntest du es auch machen, nur halt mit der Bewegung aber sobald es ans Wasser geht, wird das nichts mehr.


Auch eine Möglichkeit wäre es, wenn du eine Klasse Physik schreibst, die sich um Kollisionen u.Ä. kümmert.
Den Spieler baust du als Polygon auf, im einfachsten Fall aus zwei Punkten.
Der Spieler hat einen Bewegungsvektor, der die Richtung angibt und eine Geschwindigkeit, die den Betrag des Weges angibt, den der Spieler zurücklegt.
Tastatureingaben haben nur Einfluss in Form von vek[3] + 5; auf den Bewegungsvektor und nicht in Form von vek[3] = 0;
Dann schreibst du eine Klasse Physik und darin eine Methode prüfeBewegung, der du die Koordinaten des Spielers, seinen Vektor und seine Geschwindigkeit übergeben kannst.
Diese Methode organisiert sich alle Blöcke des aktuellen Chunks.
Dann zieht sie, bildlich gesprochen, Geraden zwischen allen Punkten des Spielerpolygons und dem Endpunkt der Bewegung.
Anschließend läuft sie an allen Geraden "gleichzeitig" entlang und guckt, ob ein Problem auftritt (Kollision, Änderung des Mediums o.Ä.).
Tritt ein solches Problem auf, so gibt sie entweder den geänderten Bewegungsvektor oder die veränderte Geschwindigkeit zurück.

Oder wenn du mehr Vertreter der verwalteten Bewegung und nicht der selbst verwalteten Bewegung bist, dann kann Physik auch gleich den Spieler bewegen.
 

Androbin

Bekanntes Mitglied
@ Gucky
Danke, ich werde es gleich mal ausprobieren!

Jetzt muss ich mir nur noch überlegen, wie ich rauskriege,
durch welche Blöcke der Strahl hindurchgeht, und durch welche nicht!

Hast du dafür vielleicht auch noch eine Formel, o. ä. parat?
 

Gucky

Top Contributor
Ich könnte dir eine zweistufige Möglichkeit basierent auf Arrays geben. Allerdings hilft das nur pro Punkt. Du müsstest dann alle soundsoviele Punkte nachprüfen, ob die Gerade in einem Block ist.

int xKoor = linie.xkoor/breiteBlock
int yKoor = linie.ykoor/dickeBlock

Damit bekommst du aus der Vogelperspektive die "Spalte".
Dasselbe müsstest du noch einmal für die Zeile, also genau den Block machen.
 

Androbin

Bekanntes Mitglied
Ich könnte dir eine zweistufige Möglichkeit basierent auf Arrays geben. Allerdings hilft das nur pro Punkt. Du müsstest dann alle soundsoviele Punkte nachprüfen, ob die Gerade in einem Block ist.

int xKoor = linie.xkoor/breiteBlock
int yKoor = linie.ykoor/dickeBlock

Damit bekommst du aus der Vogelperspektive die "Spalte".
Dasselbe müsstest du noch einmal für die Zeile, also genau den Block machen.
Danke, das müsste reichen :)
 

Androbin

Bekanntes Mitglied
Allerdings hilft das nur pro Punkt. Du müsstest dann alle soundsoviele Punkte nachprüfen, ob die Gerade in einem Block ist.
Also für die Kollision des Spielers reicht es, wenn ich nur nach jeder Spieler-Breite ("Bauchumfang") die Kollision abfrage.

Neues Problem:
Ich will in meinem Spiel Blöcke (ab-)bauen können, aber
was, wenn ich einen Block nahe an einem Eck erwische?
Dann funktioniert diese Methode (so) nicht.

Lösungsansatz:
Ich könnte für jeden Block (innerhalb eines gewissen Radius) abfragen lasse),
ob ihn die (Halb-)Gerade, die der Spieler-Sicht-Richtungs-Vektor bildet, durchläuft.

Überlegung:
Ich jede Seite des Blocks als Ebene ansehen und dann mit Vektorrechnung weitermachen,
den Schnittpunkt bestimmen und den (Block, dessen) Schnittpunkt (, der) dem Spieler am nächsten, ist als Ergebnis zurückgeben lassen.

Performance:
Außerdem will ich so wenig wie möglich Blöcke, Seiten, etc. abprüfen müssen.
Doch wie kann ich die Menge der zu prüfenden Elemente eingrenzen?

Hat da jemand von euch vielleicht etwas, das er/sie dazu beisteuern könnte?
 
Zuletzt bearbeitet:

Gucky

Top Contributor
Du könntest zuerst bestimmen, welche "Blocksäulen" der Strahl durchläuft. Also zuerst zweidimensional in der X1X2-Ebene arbeiten und dann anhand dieser Werte überprüfen der Reihe nach überprüfen, ob der Strahl die Blöcke durchstößt oder nur an ihnen vorbei läuft.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
David Schwarzbeck Java 3 dimensionale Kollisions Abfrage Spiele- und Multimedia-Programmierung 2
M Kollisions abfrage bei 3D spiel? Spiele- und Multimedia-Programmierung 12
Androbin LWJGL - Kollisions-Bug (Fallen) Spiele- und Multimedia-Programmierung 14
Fu3L Kollisions- und Abprallverhalten BreakoutKlon Spiele- und Multimedia-Programmierung 22
T Kollisions Abfrage und Klassen design Spiele- und Multimedia-Programmierung 15
N Minecraft Frage für einen Minecraft Server Spiele- und Multimedia-Programmierung 2
G [Java/KryoNet/LibGDX] Mutliplayer Packet Frage Spiele- und Multimedia-Programmierung 2
G [Java Server] Allgemeine Frage zum Thema Networking in Videospielen Spiele- und Multimedia-Programmierung 15
J Frage zum Einlesen einer .wav in ein byte Array Spiele- und Multimedia-Programmierung 3
S ImageSlider frage Spiele- und Multimedia-Programmierung 3
Anfänger2011 Minimap: Theoretische Frage zur Umsetzung Spiele- und Multimedia-Programmierung 2
windl Frage zu Airplay und zur Mitarbeit bei einer Mediaanlage Spiele- und Multimedia-Programmierung 0
S LWJGL Kamera Frage Spiele- und Multimedia-Programmierung 2
P Frage zu einem Projekt "Einarmiger Bandit" 3 Walzen / 9 Zeichnungen BLUEJ Spiele- und Multimedia-Programmierung 10
Guybrush Threepwood Ketzerische Frage: Opus-Codec für Java Spiele- und Multimedia-Programmierung 14
CookieSoft OpenGl Translatef Frage Spiele- und Multimedia-Programmierung 2
Kenan89 Theoretische Frage zu Tile Spielkarten Spiele- und Multimedia-Programmierung 9
R Tileloader Frage Spiele- und Multimedia-Programmierung 2
S Frage: NullPointer, aber warum? Spiele- und Multimedia-Programmierung 8
J Anfänger Frage wie adden? Spiele- und Multimedia-Programmierung 9
R Frage zur Kollision Spiele- und Multimedia-Programmierung 5
M.F.G. Spielvorstellung (plus KI frage): Connect Four – Extreme Spiele- und Multimedia-Programmierung 11
Helgon OpenGL Blend Frage Spiele- und Multimedia-Programmierung 18
P Frage bzgl. TextAdventure Spiele- und Multimedia-Programmierung 11
K Frage zur 3D Entwicklung zwecks vorhandener Engines Spiele- und Multimedia-Programmierung 17
V Frage zu AffineTransforms Spiele- und Multimedia-Programmierung 2
N frage zu der mp3spi Spiele- und Multimedia-Programmierung 2
J Frage zu Threads Spiele- und Multimedia-Programmierung 5
C Frage zu Ray-Picking mit JOGL Spiele- und Multimedia-Programmierung 13
M VRML Loader(noob Frage) ^^ Spiele- und Multimedia-Programmierung 3
M Prinzipielle Frage: Kann Java Grafiken ausschneiden? Spiele- und Multimedia-Programmierung 3
R Frage zu Hütchenspielprogrammierung! Spiele- und Multimedia-Programmierung 47
V Frage zu Grafiken und Software! Spiele- und Multimedia-Programmierung 5
radiac Mal eine ganz Doofe Frage... verzeiht :) Spiele- und Multimedia-Programmierung 9
Developer_X Eine Frage zur ViewBesetzung Spiele- und Multimedia-Programmierung 28
H BlueJ Frage Spiele- und Multimedia-Programmierung 13
K Malefiz programmieren - Frage zu den einzelnen Spielfeldern Spiele- und Multimedia-Programmierung 5
G Ping Pong Frage Spiele- und Multimedia-Programmierung 17
0x7F800000 allgemeine frage zu Java 3D Spiele- und Multimedia-Programmierung 12
B Frage zur Spielsteuerung bei einem rundenbasiertes Spiel Spiele- und Multimedia-Programmierung 5
G frage zu tutorial Spiele- und Multimedia-Programmierung 3
M Frage eines Anfängers Spiele- und Multimedia-Programmierung 3
N Schiffe Versenken Frage zum Spielbrett Spiele- und Multimedia-Programmierung 24
N Generelle Frage: "GUI"-Werkzeuge Spiele- und Multimedia-Programmierung 5
X Frage zu Import von CAD Zeichnungen Spiele- und Multimedia-Programmierung 4
A kurze Frage zu Java3D! (automatische Skalierung) Spiele- und Multimedia-Programmierung 3
S Poker - grundlegende frage zu paint() Spiele- und Multimedia-Programmierung 10
B Frage zum GUI-Design bei Brettspielen Spiele- und Multimedia-Programmierung 4
P Frage zum Scrolling Spiele- und Multimedia-Programmierung 23
B Frage zum Abspielen von Sounddateien Spiele- und Multimedia-Programmierung 2
J Frage zu Geometry und Shape3D Spiele- und Multimedia-Programmierung 4
J Frage zu Transform3D.mul() Spiele- und Multimedia-Programmierung 2
J Java3D: Texture-Frage Spiele- und Multimedia-Programmierung 4
C frage zu glrotated Spiele- und Multimedia-Programmierung 12
T Einsatzbereich-Frage von Java 3D Spiele- und Multimedia-Programmierung 24
S [Java2D] Performance Frage Spiele- und Multimedia-Programmierung 4
G Frage zur Sichtbarkeit von Flächen Spiele- und Multimedia-Programmierung 2

Ähnliche Java Themen

Neue Themen


Oben