Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

17.11.2012, 11:47

Kollisionserkennung drängt sich selber ins aus...

Heyho,

es ist total peinlich aber irgendwie hab ich gerade nen Brett vorm Kopf.

Es geht um ein Java 2D Spiel von oben. Ich habe dort mehrere Spieler und Tiles die Wände sein können.
Alles hat BoundingBoxen die ich einfach mit bound1.intersects(bound2) überprüfe ob sie sich überschneiden.

Wenn sie das tun, ermittel ich, in welche Richtung das Objekt läuft, und ob es frei laufen könnte wenn es in die eine nicht laufen würde. Falls das der Fall ist setze ich den einen Wert auf den Alten zurück.

Nun bleib ich leider öfter an der Wand stecken weil wenn ich einmal drinnen bin zwar rausgesetzt werde aber die andere Richtung ja auch gemeldet hat das es (als sie noch in der Wand steckte) nicht nach z.b. Unten geht...


Was ich gebrauchen könnte wäre einfach mal ein oder mehrere Ansätze wie man das Ergebnis der Kollisionserkennung verarbeitet. Man findet nur Sachen zum Testen... :/

Ziel soll es sein das die Steuerung z.b. sagt: Laufe nach Rechts und Unten. Wenn rechts eine Wand ist soll er an der Wand runter "gleiten" und nicht stehen bleiben bis man Rechts los lässt...

Vielleicht könnt ihr ja in mein Hirn was frischen Wind bringen.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

17.11.2012, 13:23

Ich versteh von dem was du geschrieben hast recht wenig;) Versuch dich vielleicht noch mal etwas besser auszudrücken. Einfach noch mal lesen bevor du geschrieben hast. Vielleicht hilft es dir aber weiter.
Deine Figur hat an sich bei der Kollision zwei Zustände. Sie kollidiert nicht, oder sie kollidiert. Wenn du sie nach links bewegst und sie nicht kollidiert, ist alles gut. Wenn sie kollidiert, verschiebst du sie so lange nach rechts , bis sie nicht mehr kollidiert. Für unten, oben und rechts geht das genau so. Wenn du jetzt diagonal laufen willst, dann solltest du die Achsen nicht einzeln betrachten. Dafür gibt es auch Möglichkeiten, aber solange du das nicht unbedingt brauchst geht es anders einfacher.
Beispiel, du bewegst dich nach links und oben gleichzeitig. Wenn der Spieler kollidiert, dann verschiebst du ihn so lange nach rechts und unten gleichzeitig, bis er nicht mehr kollidiert.
Im Prinzip hast du deinen Richtungsvektor bei der Bewegung. Beim zurückschieben, negierst du diesen Vektor einfach.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“