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

Anonymous

unregistriert

1

27.08.2006, 15:02

Kollisionserkennung, und dann?

Hi, habe eine Formel zur Kollisionserkennung von meinen Tiles:

C-/C++-Quelltext

1
2
if ( (x * tile_size + offset_x) < mariox + mario_width && (y * tile_size + offset_y) < marioy + mario_height &&
      mariox < (x * tile_size + offset_x + tile_size) && marioy < (y * tile_size + offset_y + tile_size) )


Das Problem ist, dass ich nicht abfragen kann, ob links, rechts, oben oder
unten die Kollisionen stattfinden. Habe schon Ewigkeiten davor gesessen,
wie ich die Formel abändern könnte, aber ich scheine da eine Blockade zu
haben. Vielleicht könnt ihr mir da ja weiterhelfen. Und noch eine Frage:
Bisher habe ich bei Kollisionen einfach die Bewegungsgeschwindigkeit auf
0 gesetzt, wenn links oder rechts Kollisionen stattfanden. Ist das okay, oder
gibt es da vielleicht auch bessere Möglichkeiten? Danke für die Hilfe!

Anonymous

unregistriert

2

27.08.2006, 15:20

Denkanstoß: Bezieh die Position des vorherigen Frames mit ein ;) Dann weißt du von Wo er kam ;)

Anonymous

unregistriert

3

27.08.2006, 15:34

C-/C++-Quelltext

1
2
if ( (x * tile_size + offset_x) < mariox + mario_width && (y * tile_size + offset_y) < marioy + mario_height &&
      mariox < (x * tile_size + offset_x + tile_size) && marioy < (y * tile_size + offset_y + tile_size) && lastX < mariox)  // Rechte Seite


So in etwa? ;)

Anonymous

unregistriert

4

27.08.2006, 15:37

Kann man so machen. Ich würde jedoch eher mit Geschwindigkeitswerten und Position arbeiten :)

5

01.09.2006, 04:59

Ich hab eine ähnliche Funktion zur Kollisionserkennung geschrieben, die Kollision ja/nein zurückgibt. Eingebunden wird sie bei meinem Vorschlag zwischen der Tastatureingabe des Spielers und des Renderns der Spielfigur. Beim Erzeugen der Positionsvariablen wurde auch ein Buffer für jede Variable angelegt, um den jeweils letzten Wert speichern zu können. Das ganze läuft jetzt so ab:

-Spieler drückt Taste (z.B. rechts): Buffer hat alte Position, Positionsvaribale wird (nach "rechts") verändert.
-Kollisionsabfrage wird mit der neuen Position gemacht
----Fall 1: Keine Kollision: Koordinate bleibt gültig, Buffer wird mit Koordinatenwert überschrieben
----Fall 2: Kollision! Koordinate wird durch Wert im Buffer ersetzt.
-Rendern des Spielers an den Koordinaten.

So bleibt er bei Kollision immer an seiner Position, die er vor dem Versuch, sich zu bewegen, hatte. Ganz egal, aus welcher Richtung er kommt. Hab da im Verlauf auch noch das Ergebnis einer Distanzberechnung zum anderen Spieler eingebaut, so daß er ebenfalls stehenbleibt, wenn die Distanz zur anderen Spielfigur so gering ist, dass es als Kollision gewertet wird.


Einwände hierzu?

6

01.09.2006, 07:52

ja, bei fall 2 musst du dann entsprechend der geschwindugkeit auch die alte position so anpassen, dass der spieler dann wirklich AN der wand steht, denn wenn er sich schnell bewegt bleibt er bei deiner methode etwas VOR der wand stehen, da die nächste position ja in der wand wäre...

Werbeanzeige