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.10.2011, 11:14

Kollision

Hiho!

Ich habe ein Problem.
Und zwar mit Kollisionen. Mit Rechtecken und Kreisen ist es einfach.
Nun habe ich aber einen Menschen (Kreis) der ein Sichtfeld (Kegel) hat. Ist ein Anderer Mensch im Sichtfeld des andern soll es ausschlagen.
Gut wären auch andere Formen.

Thanks im Voraus
Peace

2

17.10.2011, 11:32

Ich glaub mit dieser und ähnlichen Fragen wärst du in nem Matheforum besser aufgehoben xD
Dafür gibts sicher ne schlaue Formel, ich bin aber kein Mathematiker, hab aber nen einfachen Lösungsvorschlag:
1. abstand < radius?
2. winkel zwischen den punkten berechnen (ein bisschen trigonometrie http://de.wikipedia.org/wiki/Trigonometrie)
3. ist der winkel im sichtkegel ? tu etwas : tu nichts

3

17.10.2011, 12:07

Ok, das geht, ty!
Aber wie mach ich des mt verdrehten rechtecken??

Lg

4

17.10.2011, 13:07

Kosinus/Sinus?
Afaik ist das nicht Game-Design. :D

MfG
Check

valentin

Treue Seele

Beiträge: 212

Wohnort: Schweiz

Beruf: Schüler

  • Private Nachricht senden

5

17.10.2011, 13:23

Was genau meinst du mit verdrehten Rechtecken? Rechtecke, die um x° rotiert wurden?
Für sowas musste ich ebenfalls schonmal ne Kollisionsabfrage schreiben.
visit me on deviantArt!
http://v-alentin.deviantart.com/

There is no programming language, no matter how structured, that will prevent programmers from making bad programs. //Larry Flon

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

6

17.10.2011, 14:04

Ja ich denke das meint er. Du könntest dir einfach eine Pixelgenaue Kollision programmieren. Dann hast du für jede Form eine Maske mit denen du dann die Kollision checken kannst. Die Formen könntest du vom Code erstellen lassen oder einfach bei Paint selber pixeln. Hat den Vorteil, dass du dann jede gewollte Form machen kannst und die Kollision direkt funktioniert.
„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.“

valentin

Treue Seele

Beiträge: 212

Wohnort: Schweiz

Beruf: Schüler

  • Private Nachricht senden

7

17.10.2011, 14:39

Naja, ich beschreib' einfach mal, wie ich das gemacht hab':

Ne Kollision liegt ja vor, wenn eine der vier Ecken des Rechtecks in dem anderen (= Zwischen den vier Ecken), auf Kollision zu testenden, Rechteck liegt.
Da du dir berechnen kannst, wo die Ecken eines gedrehten Rechtecks liegen, stellt das ganze eigentlich kein Problem dar.

Das ganze hab' ich dann noch so optimiert, dass ich als erstes immer die AABB's (= AxisAligned BoundingBoxes) auf Kollision überprüft habe (wofür es praktischerweise in der Sfml ne vorgefertigte Funktion gibt). Sofern eine Kollision vorliegt, habe ich mir die Koordinaten der Punkte berechnet und gleich noch die linearen Funktionen der vier Kanten.
Sofern die Steigung der Funktionen der Rechtecke entweder 0 oder Unendlich beträgt, kann man sofort von einer Kollision ausgehen (da sie nicht gedreht wurden). Ansonsten musst du testen, ob die Punkte, deren Koordinaten schon ermittelt wurden, zwischen den Linearen Funktionen (des jeweils anderen Rechtecks) liegen.
visit me on deviantArt!
http://v-alentin.deviantart.com/

There is no programming language, no matter how structured, that will prevent programmers from making bad programs. //Larry Flon

Werbeanzeige