Kollision mit Block (Wand)

Status
Nicht offen für weitere Antworten.

Jake2.0

Mitglied
Hey Forenuser =),

Ersteinmal meine Bewunderung an dieser Stelle das ihr hier so nen cooles Forum habt.
Werd mich demnächst hoffentlich auch mal hier und da einbringen.

Also, ich bin zwar kein Neuling in Java,
allerdings fange ich nun grad mit der 2D-Programmierung an.

Bisher hab ich nach Quaxlis Tutorial nen Panel aufgebaut wo sich auch die Figur völlig frei drin bewegen kann.
Dann hab ich einen Block eingefügt in den die Figur nicht hineinfliegen können soll.
Allerdings hänge ich bei der Kollisionsabfrage.

Bisher hab ich mit .intersects geprüft ob sie kollidiert sind und dann anhand der Bewegungsrichtung der Figur wieder vor die Wand gesetzt. Wenn sich nun aber eine Figur schräg bewegt könnte das ja jeweils von 2 Seiten her sein.
Wenn ich nun noch die Koordinaten mit als Bedingung nehme komme ich aber an den Ecken des Blocks an Probleme,
da ich hier ja wieder nicht genau entscheiden kann.

Wie gestalte ich denn die Kollisionsabffrage am besten?

Viele Grüße
und thx im Vorraus

Jake
 

Marco13

Top Contributor
Ohne 100% sicher zu sein, das richtig verstanden zu haben: Könnte es helfen, zu überprüfen, an welcher der Seiten die Kollision zuerst auftritt? Also quasi den Kollisionszeitpunkt in x- und y-richtung zu berechnen, und nur die Kollision zu behandeln, die früher auftritt?
(BTW Sehr ambitionierter Nickname :wink: )
 

Jake2.0

Mitglied
Marco13 hat gesagt.:
Ohne 100% sicher zu sein, das richtig verstanden zu haben: Könnte es helfen, zu überprüfen, an welcher der Seiten die Kollision zuerst auftritt? Also quasi den Kollisionszeitpunkt in x- und y-richtung zu berechnen, und nur die Kollision zu behandeln, die früher auftritt?

Naja, das ist ja aber genau das Problem. Wie erkenne ich denn die Seite auf der die Kollision auftritt. Ich weiß, das wenn er genau in der Mitte einer Seite liegt und auftritt. Aber das funktioniert ja nicht an den Eckstücken.
Wenn er genau im 45° Winkel auf die Ecke zusteuert ... Könnte es ja sein das er eig. von 2 Seiten kommt.

Und wie ich das an dieser Stelle lösen sollte weiß ich nicht.

Was meinst du außerdem mit Kollisionszeitpunkt?

Marco13 hat gesagt.:
(BTW Sehr ambitionierter Nickname :wink: )
Was meinsten damit?!

greetz

Jake
 

EgonOlsen

Bekanntes Mitglied
Jake2.0 hat gesagt.:
Naja, das ist ja aber genau das Problem. Wie erkenne ich denn die Seite auf der die Kollision auftritt. Ich weiß, das wenn er genau in der Mitte einer Seite liegt und auftritt. Aber das funktioniert ja nicht an den Eckstücken.
Wenn er genau im 45° Winkel auf die Ecke zusteuert ... Könnte es ja sein das er eig. von 2 Seiten kommt.

Und wie ich das an dieser Stelle lösen sollte weiß ich nicht.
Das Problem an dieser Stelle ist, dass du eine bestehende Kollision auflöst, indem du auf Überschneidung prüfst, nachdem die Kollision eingetreten ist. Du kannst hier nicht immer sicher entscheiden, welches der richtige, korrigierte Zustand wäre. Im extremen Fall kannst du so sogar Kollisionen "verlieren", wenn der Anfangszustand vor dem Hindernis und der Endzustand danach ist. Die Kollision dazwischen würdest du nie erkennen (ist aber vielleicht für deine Anwendung auch nicht nötig...). Ein anderer Ansatz ist, die Kollision gar nicht erst stattfinden zu lassen. Dazu brauchst du im Prinzip sowas: www.peroxide.dk/papers/collision/collision.pdf, nur halt in 2D, was die Sache deutlich einfacher machen sollte.
 

Jake2.0

Mitglied
Also ohne das Dokument jetzt hier gelesen zu haben,
du meinst ich müsste vorher erkennen wann die Kollision eintritt?
Also bevor sie überhaupt erst eingetreten ist?

Aber dazu bräuchte ich ja min. 2 Hilfsvariablen oder?!
Und zwar die, welche die vorherige Position der Figur speichern ... oder ?

hmmm ... hatte gedacht ich komme vlt auch ohne sowas aus ... Schade

Jake
 

EgonOlsen

Bekanntes Mitglied
Jake2.0 hat gesagt.:
Also ohne das Dokument jetzt hier gelesen zu haben,
du meinst ich müsste vorher erkennen wann die Diskussion eintritt?
Also bevor sie überhaupt erst eingetreten ist?
Kollision...nicht Diskussion,,, :wink: Ja, wenn du wissen willst, mit was als erstes kollidiert wurde und die Bewegungsrichtung dann anpassen willst, brauchst du irgendwie sowas. Du musst quasi das erste Hindernis in Bewegungsrichtung ermitteln und die Richtung dann entsprechend korrigieren. Bei deinem momentanen Ansatz geht das ja nicht. Je nach Aufbau deines Levels muss man aber vielleicht nicht gar so kompliziert treiben, um ein vernünftiges Ergebnis zu bekommen. Ist es wirklich tragisch in deinem Fall, wenn es an den Ecken evtl. nicht immer genau stimmt!?
 

Jake2.0

Mitglied
Ach du meine güte ... Diskussion statt Kollision :shock: :lol:

Also letzten Endes soll es um ein Bomberman - Klon gehen.
Der Levelaufbau ist da ja denke ich bekannt ...
Aber es wär halt blöd wenn es da nicht funktioniert.
Obwohl ich zurzeit eh noch überlege .. ob man da eigentlich überhaupt in x und y richtung gleichzeitig gehen kann ... oder nur in eine ... ?!

Wenn aber mit beiden würde mich das schon stören wenn das mit den Ecken nicht korrekt gelöst wäre ...

mfg

Jake
 

EgonOlsen

Bekanntes Mitglied
Jake2.0 hat gesagt.:
Also letzten Endes soll es um ein Bomberman - Klon gehen.
Der Levelaufbau ist da ja denke ich bekannt ...
In einem klassischen 2D-von-oben-Bomberman gibt es eigentlich kein Schräggehen. Die Bewegung ist üblicherweise tilebasiert, d.h. du bewegst dich immer von einem Leveltile zum nächsten und es gibt keine Zwischenschritte, du kannst also nicht zwischen den Tiles stehen(außer in der Bewegung und die muss erst abgeschlossen sein, bevor die nächste Eingabe greift). Deswegen sind die Kollisionbedingungen auch sehr einfach und du brauchst das eigentlich gar nicht so kompliziert....WENN du das so machen willst. Musst du natürlich nicht, du kannst die Bewegung auch frei gestalten. Das sieht dann so aus wie bei mir: jpct.de/robombs.game und das benutzt im Übrigen eine Variation des Ansatzes aus dem oben verlinkten PDF... :wink:
 

Marco13

Top Contributor
Wo jetzt das Problem bei 2 Hilfsvariablen ist, weiß ich nicht. Jedenfalls klingt das, was du machen willst, nach einer rudimentären Form von kontinuierlicher Kollisionserkennung. Wenn man davon ausgeht, dass die Hindernisse sich nicht bewegen, ist das dramatisch viel einfacher, als wenn zwei sich bewegende Objekte auf Kollisionen geprüft werden sollen. So könntest du (ganz grob) sowas machen wie
Code:
Wiederhole
{
    Für alle Ecken E der Spielfigur F
    {
        Berechne das Liniensegment L, das duch die Bewegung der Ecke E im nächsten Schritt beschrieben ist 
            (d.h. der Anfang von L ist der Eckpunkt E, und das Ende von L ist der Eckpunkt E nach dem nächsten Bewegungsschritt)
    
        Für alle Kanten K aller Hindernisse
        {
            Berechne den Schnittpunkt S zwischen der Bewegunglinie L und der Kante K
            falls der Schnittpunkt S existiert
            {
                Bestimme den Zeitpunkt der Kollision 
                    (also die relative Position t des Schnittpunktes S auf der Bewegungslinie L -
                     ein Wert zwischen 0 und 1)
                Wenn der Zeitpunkt der früheste ist, der bisher gefunden wurde, merke dir alle relevanten Daten der Kollision (*zwinker*)
            }
        }
    }
    Behandle die früheste Kollision, die gefunden wurde *nochmal zwinker*
    
} solgange eine Kollision aufgetreten ist

Wie genau das Behandeln der Kollision aussehen soll, musst du dir dann überlegen. Also, ob der Spieler einfach stehenbleiben soll, oder ob er "abprallen" soll, oder ob er einen Drehimpuls bekommen können soll, wenn er mit einer Ecke irgendwo "hängenbleibt"....
 

Jake2.0

Mitglied
^^
oh, cool =)
Eine 3D Engine in Java ist nach mir benannt x)
Den Name hab ich aber wegen etwas anderem gewählt.
Nur vielen Dank für den Hinweis :)

mfg
Jake
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Kollision Spiele- und Multimedia-Programmierung 5
A Kollision funktioniert nicht richtig bei zu schneller Geschwindigkeit des Spielers Spiele- und Multimedia-Programmierung 0
N Kollision von zwei ImageIcons Spiele- und Multimedia-Programmierung 8
D Kollision funktioniert unten aber nicht oben Spiele- und Multimedia-Programmierung 4
J Kollision (libgdx) Spiele- und Multimedia-Programmierung 2
S Kollision Spiele- und Multimedia-Programmierung 2
J Kollision genau erkennen mit intersects Spiele- und Multimedia-Programmierung 27
K a* kollision der einheiten Spiele- und Multimedia-Programmierung 3
S Probleme bei Breakout - Brick kollision Spiele- und Multimedia-Programmierung 2
F Rechteck Kollision Spiele- und Multimedia-Programmierung 10
H 2- D Kollision Spiele- und Multimedia-Programmierung 14
C Zeldaklon Problem mit Wand-Kollision Spiele- und Multimedia-Programmierung 8
O Kollision Polygon und Rechteck Spiele- und Multimedia-Programmierung 2
S Pacman Kollision von Münzen und Mauern Spiele- und Multimedia-Programmierung 11
P Gridpane Kollision Spiele- und Multimedia-Programmierung 3
Androbin Kollision zwischen Raster und Nicht-Raster Spiele- und Multimedia-Programmierung 2
L Kollision soll nur an oberer Seite (Breite) möglich sein Spiele- und Multimedia-Programmierung 6
Hercules Kisten Kollision Spiele- und Multimedia-Programmierung 2
S 3D-Kollision mit zwei ArrayLists Spiele- und Multimedia-Programmierung 7
T Pixelgenaue Kollision Spiele- und Multimedia-Programmierung 5
A LWJGL 3D Objekte Kollision Spiele- und Multimedia-Programmierung 3
S Kollision tile-based 2D Plattformer Spiele- und Multimedia-Programmierung 2
D Greenfoot Kollision Spiele- und Multimedia-Programmierung 5
D Kollision verhindern Spiele- und Multimedia-Programmierung 2
R Frage zur Kollision Spiele- und Multimedia-Programmierung 5
Maxim6394 [Java3D] Probleme bei Kollision Spiele- und Multimedia-Programmierung 7
Kr0e Kollision zweier Kugeln... Wo ist Newton ?? Spiele- und Multimedia-Programmierung 9
C Kollision zwischen 2 Kreisen Spiele- und Multimedia-Programmierung 3
Helgon Kollision von jeder Seite des Blocks Spiele- und Multimedia-Programmierung 3
Fab1 Kollision die 100ste Spiele- und Multimedia-Programmierung 5
D Jump'n'run Kollision bei Blöcken Spiele- und Multimedia-Programmierung 10
P PingPong Spiel - Kollision Spiele- und Multimedia-Programmierung 2
C Bitmaske und Kollision Spiele- und Multimedia-Programmierung 2
J Spielprogrammierung mit bewegung und kollision Spiele- und Multimedia-Programmierung 24
S Kollision Kreis Rechteck Spiele- und Multimedia-Programmierung 8
aze Java3D: Gegenstände aufeinander zubewegen ohne Kollision Spiele- und Multimedia-Programmierung 4
baddestpoet pixelgenaue Kollision Spiele- und Multimedia-Programmierung 4
S Kollision in 2D Spiele- und Multimedia-Programmierung 12
B Gedrehte Rechtecke Kollision Spiele- und Multimedia-Programmierung 4
C Kollision in Java3D Spiele- und Multimedia-Programmierung 4
J Kollision von Objekten Spiele- und Multimedia-Programmierung 7
M Asteroids Clone: Kollision zwischen Schuss und Feind Spiele- und Multimedia-Programmierung 13
F Bewegung/Kollision von Objekten auf Tastendruck Spiele- und Multimedia-Programmierung 6
Z Kollision Spiele- und Multimedia-Programmierung 3
F Kollision für Arkanoid Spiele- und Multimedia-Programmierung 2
N Kollision abfragen Spiele- und Multimedia-Programmierung 3
K Sprites / Kollision Spiele- und Multimedia-Programmierung 3
S Jump'n'Run: Probleme mit Kollision Spiele- und Multimedia-Programmierung 13
A Minecraft Plugin, welches nur bestimmten Block zum bebauen festlegt Spiele- und Multimedia-Programmierung 26
M Beste methode zur Map Erstellen in "Block" Games Spiele- und Multimedia-Programmierung 2
Fu3L Block Terrain Generation Spiele- und Multimedia-Programmierung 8
T [Spielvorstellung] Block Shifter Spiele- und Multimedia-Programmierung 28
K 3D-Wand und Statik Spiele- und Multimedia-Programmierung 0
L Wand platzieren Spiele- und Multimedia-Programmierung 5

Ähnliche Java Themen


Oben